Subversion入门手册
本文只介绍linux版本的subversion的简单用法,至于windows的subversion则比较傻瓜化,对照本文的命令自己一看就懂,就不另作介绍了。
另外由于windows下不能区分文件名的大小写而linux则可以区分,因此建议日常维护时最好使用linux版本的subversion,以避免大小写的问题而造成的冲突,windows下的svn可以作为辅助,因为它用来查看确实要方便一些。
-
如何从SVN服务器上下载源码(svncheckout和svnexport)
有两种方式(在之后的例子中,命令都用简写,除非该命令不支持简写):
svn checkout [-r version] URL [PATH]
例如:svn co -r 180http://192.168.0.2/svn/netmoon/software/test/home/test
这里的-r是指定版本号的意思,如果缺省则会下载最新版本号,当然PATH也可以缺省,缺省时则自动创建文件夹或者文件。
svn export[-r version] URL [PATH]
例如:svn export -r 180http://192.168.0.2/svn/netmoon/software/test/home/test
svn export跟svncheckout的使用方法一样,所不同的是,前者下载下来的是一个纯净的代码树,不包含任何的svn控制信息,而svnchechout下载的代码树是包含有svn版本控制信息的。
这里提供一个把包含svn版本信息的代码树转变为纯净代码的一个方法,就是批量删除.svn文件夹,可以用以下命令实现:
find PATH -type d -name ".svn" | xargs rm -fr
-
下载完代码,当然就要编码了(svncommit)
编码完毕,我们上传代码就用这个命令:
svn commit [PATH]
例如:svn ci /home/test -m "Commit my changes, I am Ben, Thanks"
当然如果你缺省PATH的话,则会对当前目录进行提交动作。前提是你现在所处的目录,是在svn的版本控制之下。
注意,我们的服务器端进行了限制,每次对服务器提交更改都需要用-m参数带上日志消息,且长度不小于5.
-
如何更新本地的代码(svnupdate)
svn update [-r version] PATH
例如:svn up -r 180 /home/test
或者:cd/home/test
svn up -r 180
注意,你的/home/test目录必须是受svn版本控制,例如它是从服务器上svnco下来的。
-
如何把一个纯净代码树添加到SVN服务器?(svn import)
当然是用导入命令了:
svn import [PATH] URL
例如: svn import /home/testhttp://192.168.0.2/svn/netmoon/software/test-m "add test"
老规矩,缺省PATH则会导入当前目录。
再注意,我们的服务器端进行了限制,每次对服务器提交更改都需要用-m参数带上日志消息,且长度不小于5.
-
如何在工作目录下添加删除文件和文件夹
前提是你的工作目录是受svn版本控制的。
svn add PATH
例如:svn add /home/test/newDir
svn add /home/test/nerFile
注意这个PATH既可以是文件夹,也可以是文件,而且是已经存在的文件或文件夹,svnadd不能创建文件或文件夹,它只是把已经存在的打上一个svn的添加标记,待之后的svnci再提交到服务器。
svn delete PATH
例如:svn del /home/test/oldDir
在进行了本地的添加删除标记之后,下一步就是svnci了,它则会真正地去把本地的更改提交到服务器上,给服务器添加或者删除文件。
-
如何撤销工作目录中的改动?(svn revert)
当我们做了很多测试工作,或者做了错误的改动,就可以使用它:
svn revert PATH
例如:svn revert /home/test/file
svn revert /home/test/ -R
PATH可以是文件,也可以是文件夹,注意可以使用-R进行递归操作,另外本条操作可以不需要网络。
当然,你要撤销改动,还有另一种方法,删除文件,再svnup一下,就还原了。
-
如何撤销服务器中的改动?
首先把服务器中之前的版本merge到本地上,然后再commit即可
svn merge -r NEW:OLD URL PATH
例如:svn merge -r 391:370http://192.168.0.2/svn/netmoon/software/testtest
svn ci -m "rollback the version from 391 to 370 on server fortest"
上例即可将服务器上的test目录从版本391回滚到版本370
-
如何解决冲突?
冲突的产生:
在SVN服务器上有一个ABC.txt的文本文件,此时用户A想要修改该文本内容为“1234”,用户B想修改为“5678”,在本地做好修改后,两人都进行提交。
当然对于服务器来说,两人肯定是有先后的,第一个提交的(假设是A)肯定是会成功。而第二个呢?当然是失败。
冲突的解决:
在第二个人提交返回失败时,服务器会提示你,你的版本已过期,请更新。
好,那我们来svnup一下,成功,但是服务器会提示文件仍然有冲突。
打开本地的ABC.txt文件,我们会发现,里面有一些<<<< >>>>这样的符号,而符号中间,就是有冲突需要我们解决的。
在跟A进行商议之后,按照商议的结果对冲突部分的文件进行更改,或者也可以保留A的1234,直接在它的后面换行,再加上“5678”,OK,就这样改动。
最后别忘了:删除<<<< >>>>符号,取消冲突标记。
最后svnci,提交成功!
小提示:
如果你第一次执行svn命令连接到一个服务器的话,在你输入账号密码后,它会提醒你是否保存密码,我一般是保存,这样以后就不用再输了;
如果你想换个账号密码登陆,那么你需要删除linux系统中保存svn密码的文件svn.simple,在我的电脑上,它的目录是/home/Ben/.subversion/auth/svn.simple,至于你自己的,你就慢慢找了。
在Windows系统下,右键弹出TortoiseSVN菜单Settings->SavedData->Authentication data,Clear,ok。当然,前提是你安装的是TortoiseSVN客户端。