一、 基本概念
版本库:服务器上的文件目录
工作拷贝: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的版本修改了那些&#x