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代码。