当前位置: > Linux服务器 > SVN >

Linux之svn常用命令详解

时间:2015-02-08 00:25来源:linux.it.net.cn 作者:IT
1、签出代码
        #svn co path
        
2、添加文件
        #svn add xxx
        将xxx文件或目录添加到svn库中。

3、删除文件
        #svn delete xxx
        将xxx文件或目录从svn库中删除
        这个操作只会删除本地xxx文件,而对于svn库中的xxx文件,需要ci才会真正从svn库中删除。

4、修改文件
        #svn move xxx yyy
        将xxx文件重命名为yyy,类似于Linux的mv命令。

5、检查修改
        #svn status
        检查修改了哪些文件。

6、查看差异
        #svn diff
        列出修改的明细。
        #svn diff -r 3
        同具体的版本进行diff
        #svn diff -r 2:3
        比较具体的两个版本之间的diff

7、查看日志
        #svn log
        查看历史日志信息。

8、撤销修改
        #svn revert xxx
        撤销修改,恢复到未改变的本地工作副本。

9、移除冲突
        #svn resolved xxx
        移除冲突,但并不解决冲突。

10、提交代码
        #svn ci -m "message" xxx
        将xxx文件提交到svn库。

12、更新版本
        #svn update -r xxx path
        将代码更新到xxx版本,如果update后面什么都没有,则将当前目录更新到最新版本。
    
13、分支与合并
        (1)创建分支
        #svn copy trunk branches/xxx -m "message"
        从trunk创建一个分支branch,这样就可以checkout branch分支来开发了。
        需要注意的是:最好将branch与trunk放在同一层级,否则,容易引起混乱。
        (2)分支合到主干
        先用svn st查看branch分支没有任何本地修改,即代码都提交到svn了。
        再checkout一份trunk代码到本地,并切换cd到trunk目录下,执行如下命令来将branch分支上的改动merge到trunk:
        #svn merge http://.../branches/xxx
        如果出现merge冲突则进行解决,如下查看冲突文件:
        #svn st|grep ^C
        解决冲突后,执行svn ci提交变动到svn。
        当然也可以merge指定branch上的某些版本合并到trunk:
        #svn merge http://.../branches/xxx -r 150:HEAD
        上面命令将branch中从版本150到当前版本的所有改动都合并到trunk中。
        合并完后,可以用如下命令来查看merge情况:
        #svn mergeinfo http://.../branches/xxx
        执行上面命令可以查看当前branch中有哪些改动已经合并到trunk中了。
        #svn mergeinfo http://.../branches/xxx --show-revs eligible
        执行上面命令可以查看branch中哪些改动还未合并。
        (3)主干合到分支
        主干合并到分支的过程同上,具体如下:
        #svn co http://.../branches/xxx
        #svn merge http://.../trunk -r 150:160
        #svn st|grep ^C
        #svn ci -m "merge trunk to branch"
        #svn mergeinfo http://.../trunk
        #svn mergeinfo http://.../trunk --show-revs eligible

14、版本回退
        将代码回退到某一个版本的方法有2种:
        (1)svn merge
        #svn up
        先将本地代码update到最新版本,比如:20。
        #svn log
        查看历史版本,找出要恢复的版本,比如:10(svn版本号在查看的时候会是rxxx,但用的时候要去掉r)。
        #svn diff -r 10:20 代码目录
        如果有必要的话,可以用上面命令来查看待恢复版本与当前版本的差异。
        #svn merge -r 20:10 代码目录
        回滚版本即反向合并,注意上面版本号之间的顺序,上面命令将版本r20回退到r10。
        如果需要从当前最新版本回退到xxx版本,还可以如下:
        #svn merge -r rHEAD:xxx http://.../trunk
        上面的地址是待回退分支,操作完成后,本地的working copy会更新为trunk的xxx版本的代码。
        #svn diff -r 10 xxx.cpp
        如果必要可以用如上命令来查看回退后文件差异,如果有则手动修改之。
        #svn ci -m "roll back to r10" 代码目录
        如果没有差异,则需要将代码提交到svn,否则回滚不会生效,提交后会在svn库中生成新的版本号,比如这里会是:r20。
        (2)svn up
        还可以如下来回退版本:
        #svn up 
        #svn up -r 10
        #svn ci -m "roll back to r10" 代码目录

15、创建tags
        #svn mkdir tags
        #svn copy trunk/ tags/project_1.0.0
        执行上面命令将备份版本copy到tags。
        #svn ci -m "add project_1.0.0 to tags"

16、冲突解决

        当你与别人同时开发同一份代码,合并的时候就会出现冲突,比如:svn update,此时svn会提示并让你选择冲突解决方式。
        一般会选择推迟解决即(p) postpone,这样会将冲突引入本地而不会影响svn服务器端,此时,本地目录下会生成几个文件,它们的扩展名分别是xxx.cpp、xxx.cpp.mine、xxx.cpp.r6328和xxx.cpp.r6336。

        可以不用管其它文件,而仅仅修改xxx.txt来解决冲突,在该文件中会有类似于<<<<<<.mine、======、>>>>>>.r6336之类的标记,这些地方就是需要合并冲突的地方,根据需要做增/删/改,保存退出后,开始测试,如果确认没有问题了,就可以如下来告诉svn服务器端你已经解决冲突了:

        #svn resolved xxx.cpp

        该命令会自动删除xxx.cpp.mine、xxx.cpp.r6328、xxx.cpp.r6336这几个文件,需要注意的是,如果手动删除这几个文件也会导致svn服务器认为你已经解决了冲突,这带来的后果是冲突已经存在,而且文件中还存在前面那些奇怪的标记。

        在冲突未解决前,如果试图提交代码会失败,执行完上面命令后,就可以ci代码了。

        关于冲突解决的更详细解决方法请参见这里。


(责任编辑:IT)
------分隔线----------------------------