肖芳城:svn命令小集

一、 基本概念

版本库:服务器上的文件目录
工作拷贝:svn co分支到你本地的文件夹目录
工作副本:co到本地的目录下的每个文件夹里的.svn文件夹。记录了"帮助 Subversion 识别哪些文件做过修改,哪些文件相对于别人的工作已经过期"的信息。

二、SVN版本比对原理

通过.svn与版本库比对。
".svn"文件夹下记录2个信息:
1、是当前用户co下分支的版本号,
2、是记录用户本地修改的最后时间戳。
通过以上2个信息,版本库能识别不同的状态,从而给予或限制用户做什么类型的操作。
	
当出现版本库中该分支已经有人提交代码(即版本库中该分支的版本更新),并且本地自己有修改,此时,如果用户提交,版本库先比较用户本地工作拷贝.svn中的版本和版本库版本,同时比较时间。她将需要用户先svn up,然后看看是否有冲突,没冲突再svn ci。

三、svn常用命令

以rate应用为例,实际说明操作。
1、svn cp
svn cp http://svn.alibaba-inc.com/repos/ali_cn/olps/rate/branches/20100810_7368_2 http://svn.alibaba-inc.com/repos/ali_cn/olps/rate/branches/20100817_xfc_DEV -m"xfc cp"
【注】:该动作已经由aone接手操作。
2、svn co(svn checkout)
svn co http://svn.alibaba-inc.com/repos/ali_cn/olps/rate/branches/20100817_xfc_DEV rate (【注】:自定义目录,本地目录)
3、svn st
!       biz/remark/src/java/com/alibaba/china/rate/biz/remark/service/impl/RemarkServiceImpl.java
D       biz/remark/src/java/com/alibaba/china/rate/biz/remark/service/impl/RemarkTempServiceImpl.java
?       biz/remark/src/java/com/alibaba/china/rate/biz/remark/util/MyTestUtil.java
A       biz/remark/src/java/com/alibaba/china/rate/biz/remark/util/MyTestUtil2.java
X       deploy/jboss_server
M       web/remark/src/java/com/alibaba/china/rate/remark/web/action/ListsAction.java
?       bundle/war/src/webroot/META-INF/autoconf/log4j.xml.r250274
?       bundle/war/src/webroot/META-INF/autoconf/log4j.xml.mine
?       bundle/war/src/webroot/META-INF/autoconf/log4j.xml.r250702
C       bundle/war/src/webroot/META-INF/autoconf/log4j.xml
【注】:
"!"表示:本地执行了"rm -rf",但是未执行"svn del"的状态。
"?"表示:本地新加了一个文件,但是未执行"svn add"的状态。
"A"表示:本地新加了一个文件,且执行了"svn add"的状态。
"X"表示:执行了"svn external"的状态。
"D"表示:本地执行了"rm -rf",且执行了"svn del"的状态。
"M"表示:本地修改了该文件时的状态。
"C"表示:冲突状态,是重点关注状态之一。
产生的场景:A\B两个开发修改同一处代码,其中A开发已经提交,B开发在svn up的时候,就会出现conflict的提示,需要用解决冲突后,svn resolved下,具体见svn resolved。

4、svn up
【注】:当出现多个开发在同一个项目中开发同一个应用分支时,提交代码前都需要先做一次"svn up",保证合并最新代码,同时解决本地冲突。

5、svn info
【注】:一般用于获取当前分支url。
6、svn diff
M       web/remark/src/java/com/alibaba/china/rate/remark/web/action/ListsAction.java
【注】:以上这个""状态的文件,想看它相对你最新一次co的版本修改了那些,可以使用:
svn diff web/remark/src/java/com/alibaba/china/rate/remark/web/action/ListsAction.java
"-"是本地删除的行。
"+"是本地增加的行。
7、svn revert
【注】:当你发现某个你修改的文件你不想修改了,怎么办:svn revert。
svn revert web/remark/src/java/com/alibaba/china/rate/remark/web/action/ListsAction.java
然后svn st下,你会发现改文件M状态已经没了。
8、svn resovled
【注】:如上面3(svn st),当出现"svn up"下来的文件和本地的有冲突(即出现C状态)的时候,冲入如何解决呢?
a,打开文件:vi bundle/war/src/webroot/META-INF/autoconf/log4j.xml
b,你会发现有这么3个标识:
<<<<<<< .mine
=======
>>>>>>> .r250702
另外还有3个文件:
?       bundle/war/src/webroot/META-INF/autoconf/log4j.xml.r250274
?       bundle/war/src/webroot/META-INF/autoconf/log4j.xml.mine
?       bundle/war/src/webroot/META-INF/autoconf/log4j.xml.r250702
	
以上意思是:"<<<<<<< .mine""======="之间的是你本地添加到内容。"======="">>>>>>> .r250702"部分的就是svn up下来的内容。
c,捞出修改这部分代码的开发,跟他一起确认如何解决冲突。
d,当确认了解决方案,解决了冲突,就删除类似以上那3个标识。
最后:svn resovled bundle/war/src/webroot/META-INF/autoconf/log4j.xml
冲突解决。你会发现上面的3个文件不翼而飞了。
9、svn ci
【注】:提交本地修改代码到服务器。
svn ci -m"modify remark log4j conf."
10、svn log
【注】:显示提交的日志信息
默认,显示该分支的所有相关版本提交日志。
如果只想显示自己打的分支,提交的日志情况,可以使用"—stop-on-copy"即可(stop前是2个"-")。
11、svn merge
【注】:合并分支。需要将老的修改合并到最新打出来的分支。
【注】:恢复旧版本。
当新打一条分支:
svn cp http://svn.alibaba-inc.com/repos/ali_cn/olps/rate/trunk http://svn.alibaba-inc.com/repos/ali_cn/olps/rate/branches/20100817_xfc_DEV2 -m"xfc cp"

现在要将老分支(http://svn.alibaba-inc.com/repos/ali_cn/olps/rate/branches/20100817_xfc_DEV)的修改合并到新分支(http://svn.alibaba-inc.com/repos/ali_cn/olps/rate/branches/20100817_xfc_DEV2)上,步骤如下:
(1)co下新分支。
svn co http://svn.alibaba-inc.com/repos/ali_cn/olps/rate/trunk http://svn.alibaba-inc.com/repos/ali_cn/olps/rate/branches/20100817_xfc_DEV2 ratenew
(2)查看老分支提交日志。
svn log --stop-on-copy http://svn.alibaba-inc.com/repos/ali_cn/olps/rate/branches/20100817_xfc_DEV
------------------------------------------------------------------------
r250702 | fangcheng.xiaofc | 2010-08-17 20:38:19 +0800 (二, 17  8月 2010) | 1 line

xfc ci
------------------------------------------------------------------------
r250272 | fangcheng.xiaofc | 2010-08-17 10:14:33 +0800 (二, 17  8月 2010) | 1 line

xfc cp
以上"r250272"版本是本分支最老的版本号,最新版本可用"HEAD"表示。
(3)合并老分支对应版本到新分支。
xfc@xfc:~/ratenew/20100817_xfc_DEV2$ svn merge --dry-run -r250272:HEAD http://svn.alibaba-inc.com/repos/ali_cn/olps/rate/branches/20100817_xfc_DEV
--- Merging r250273 through r250724 into '.':
U    bundle/war/src/webroot/META-INF/autoconf/log4j.xml
"--dry-run"是假合并,并没有真正合并分支修改到新分支,如果要真做,删除该参数。

恢复旧版本,只要把版本次序倒过来:
svn merge HEAD :-r250272 http://svn.alibaba-inc.com/repos/ali_cn/olps/rate/branches/20100817_xfc_DEV
svn merge的原理是比对版本差异,然后把差异的内容应用、合并到本地工作拷贝中。高版本:低版本,相当于"相对于高版本,低版本删除或者修改了那些内容"

四、乌龟的使用

乌龟通常方便用于svn ignore和svn external这2个属性的设置上。


 
右键点击"deploy"的"show properties"可以查看到:


 
点击"new","edit"可以新增,修改svn属性。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值