创建一个版本库:
svnadmin create ~/SVNTestRepo
创建一个项目目录:
svn mkdir file:///home/lsf/SVNTestRepo/Project1 -m "create a dir."
在项目下创建目录,用来保存项目的主干线、分支、标签:
svn mkdir file:///home/lsf/SVNTestRepo/Project1/trunk -m "create trunk."
svn mkdir file:///home/lsf/SVNTestRepo/Project1/branches -m "create branches."
svn mkdir file:///home/lsf/SVNTestRepo/Project1/tags -m "create tags."
可以用list查看当前版本库下的目录:
svn list file:///home/lsf/SVNTestRepo/Project1
我们一般导入新文件或目录到主干线trunk目录下。
如导入一个新文件:
svn import ./t1.txt file:///home/lsf/SVNTestRepo/Project1/trunk/t1.txt -m "import t1.txt"
导入文件时要指定目标目录,还可以重命名文件,我在这里就不重命名了,直接使用原文件名导入。
还可以导入一个目录下的所有文件:
svn import ~/temp/ file:///home/lsf/SVNTestRepo/Project1/trunk/temp -m "import temp.temp is a path."
这里将本地的temp目录下的文件导入到版本库trunk下的temp目录下。
如果导入的目标版本库不存在,会导入失败,失败信息可能如下:
svn: Unable to open an ra_local session to URL
svn: Unable to open repository 'file:///home/lsf/SVNRepo/SVNTest2'
使用file:///形式的URL来访问Subversion库,这表示在本地通过文件系统访问。但我们的Subversion库可能需要通过网络被其它用户访问,这就需要用到其它的协议,下面是Subversion支持的各种访问协议:
file:/// 通过本地磁盘访问。
http:// 与Apache组合,通过WebDAV协议访问。
https:// 同上,但支持SSL协议加密连接。
svn:// 通过svnserve服务自定义的协议访问。
svn+ssh:// 同上,但通过SSH协议加密连接。
导入成功后,导入的源目录还不是SVN工作目录,要用checkout来获取指定版本库对应的工作副本,即工作目录:
svn checkout file:///home/lsf/SVNRepo/SVNTest1/ ~/SVNProject1
如果成功,会输出以下信息:
A /home/lsf/SVNProject1/trunk
A /home/lsf/SVNProject1/branches
A /home/lsf/SVNProject1/tags
Checked out revision 1.
1. 临时切换
在所有命令下强制加上--username 和--password选项。
例如:svn up --username zhangsan --password 123456
当然,最后不要加上--password,在需要时才输入比较好。
2.永久切换
删除目录 ~/.subversion/auth/ 下的所有文件。下一次操作svn时会提示你重新输入用户名和密码的。换成你想用的就可以了。然后系统默认会记录下来的。
执行copy命令来创建分支:
svn copy svn://192.168.232.129/Project/trunk svn://192.168.232.129/Project/branches/branch1 -m "create a branch of trunk."
这里在branches后加上了branch1目录,即将trunk下的所有文件都添加到branch1目录了。
如果不上branch1,则会在branches下生成trunk目录,有点尴尬。
svn switch命令改变存在的工作副本到另一个分支。
在分支工作时,最好查一下当前的工作副本究竟是什么,因为switch会切换工作副本的。
查看当前工作副本的URL:svn info | grep URL
如果switch后,记得要switch回去,避免后面造成目录的混乱。
合并时,务必指定合并的版本号范围。
举个例子,把分支的修改合并到trunk来:
先切换到trunk工作副本的目录,update一下,
svn merge -r r1:r2 svn://192.168.232.129/Project/branches/branch1
r1和r2是一个合并范围,要注意的是,r1分支的初始状态版本,即为创建分支的版本,或者为上次合并分支时的版本;r2为分支当前的最新版本HEAD。
通过在trunk和分支中执行svn log -v | less可以查看r1和r2。
有时会将主干trunk合并到分支,同样要注意r1和r2。
参考:http://blog.csdn.net/fbysss/article/details/5437157
1.svn: Can't connect to host '127.0.0.1': Connection refused
无法连接到SVN服务器,应该是SVN服务器未启动。
启动:svnserve -d -r 版本库目录,如svnserve -d -r /home/user1/SVNRepo
停止SVN:killall svnserve
版本库目录的配置文件,在版本库下conf的 目录下,有3个配置文件:
authz passwd svnserve.conf 。
如果在操作时出现svn: Authorization failed这个错误,是因为授权配置文件authz配置不正确。
如果svnserve的启动参数 -r 所指定的目录为版本库的目录,这时为单个版本库的工作,用户权限的段名要配置成这样:
[/]
admin=rw
/为版本库的根目录。
如果svnserve的启动参数 -r 所指定的目录为版本库的上级目录,这时一个svnserve可以为多个版本库工作,这时如果想限制指定库的权限,就应该指定具体的库,像这样:
[TestRepo:/]
admin=rw
TestRepo为其中一个版本库,这种方式就是在多版本库时指定其中一个版本库的用户的权限。
配置详见:http://www.ccdream.com/s/hacker/54.html