Subversion的签出、更新、增添文件目录、拷贝移动文件和处理合并冲突

Subversion的签出、更新、添加文件目录、拷贝移动文件和处理合并冲突

本文总结Subversion常用的功能,以备索引。

1. 签出

a)       使用svn checkout(co)命令从项目目录中取出东西并且新建一个工作拷贝。

b)       不指定名称则使用原文件目录名。Svn checkout svn://192.168.195.54/simple将svn目录的simple项目拷贝到当前目录下的simple下。

c)        指定新目录名为svn checkout svn://192.168.195.54/simple simpleNewName。

d)       可以在checkout后加上版本名称如:svn checkout –r 7 svn://192.168.195.54/simple simpleNewName为拷贝第7版程序到simpleNewName下。

e)       使用svn info simpleNewName可以了解拷贝信息。

2. 保持更新

a)       保持一小时更新一次的频率。

b)       Svn update命令来更新,如果再子目录,则只更新子目录。

c)        可以指定多个文件或者目录,如svn update build.xml scr/ test/

d)       Svn的update返回状态为A添加,U更新,D删除,G修改合并,C冲突。

3. 添加文件和目录

a)       Svn add dir 只是记住了添加到仓库中的文件的名字,并没有实际把改动提交,必须在使用commit命令。

4. 拷贝、移动文件和目录

a)       对文件的拷贝和移动,都最好通过svn命令进行。

b)       Svn copy from.txt to.txt;from.txt拷贝一份为to.txt。再svn commit –m‘xxxx’;提交,使用svn log to.txt查看文件状态。

c)        重命名文件svn move a.java renew.java将a.java重命名为renew.java,再提交svncommit –m “xxx”。这样做的好处是保留了文件的拷贝记录。

d)       重命名目录svn move a b将目录重命名,最后提交。

e)       以上命令在本地工作目录操作,也可以在客户端使用URL操作:svn move –m “xxx” \ svn://192.168.195.54/simple

5. 查看修改内容

a)       Svn diff a.txt查看上次在项目仓库更新了工作拷贝后修改了什么。可在不连接服务器的情况下,借由以往历史版本推出什么修改了。

b)       比较版本之间的差异svn diff –r19:20 clock.java,时间之间的差异svn diff -r{"22:10"},最新版本svn diff – r HEAD,基准版本svn diff –r BASE,最后改动版本svn diff –r COMMITTED,前一个版本svn diff –r PREV。eg.svn diff –r PREV:BASE a.java

c)        生成补丁文件svn diff > mychangs.patch;补丁的应用patch –p0 –I mychanges.patch。这个功能可以把修改代码临时性导入系统中,不过要注意仓库的同步。

6. 处理合并冲突

a)       AB程序员更新最新代码,A程序员修改代码上传后,B用户继续修改同一文件后上传戳先错误。使用svn update 命令来检查,发现冲突,解决冲突的方法有三种:

i. 扔掉自己的改动:svn revert a.txt,svn update a.txt

ii.扔掉仓库中的改动cp a.txt.mine a.txt本地文件拷贝到仓库,svn resolved a.txt说明解决完成。

iii.手工修改<<<>>>部分代码,最后提交svn resolveda.txt。

以上修改完成后,就可以update,确认无误后commit代码。