项目优化经验分享(六)SVN冲突和处理

来源:互联网 发布:电脑声控软件 编辑:程序博客网 时间:2024/04/30 06:53

    上一篇博客我们分享了新增需求的确定思想站在全局看问题》。今天我们来分享项目开发中SVN冲突的解决经验:SVN冲突和处理!

    引言

    开发过项目的人都知道,公司开发一个项目都会使用到版本控制工具,版本控制工具很多,比如Clear case,CVS,Visual SourceSafe,SourceAnywhere ,StarTeam,SVN,CVS,GIT等等,有的是元老级开发工具,有的是后起之秀,各种版本,百花齐放,这篇博客我们将要谈到的则是常用版本控制工具:SVN的冲突和处理。

    实例  


    1.冲突产生

            假设A、B两个用户都在版本号为1000的时候,更新了practice.txt这个文件,A用户在修改完成之后提交practice.txt 到服务器,这个时候提交成功,然后practice.txt文件的版本号已经变成1001了。同时B用户在版本号为1000的practice.txt文件上作修改,修改完成之后提交到服务器时,由于不是在当前最新的1001版本上作的修改,所以导致提交失败。

           冲突发生时,subversion会在当前工作目录中保存所有的目标文件版本[上次更新版本、当前获取的版本(即别人提交的版本)、自己更新的版本、目标文件]。

    (1)现在A、B两个用户都更新practice.txt文件到本地。

1

    (2)文档中原始文件内容如下:

2

    (3)A用户修改文件,添加内容“A用户修改-提交”完成后提交到服务器

4

    (4)B用户修改文件,添加内容“B用户修改-提交”完成后提交到服务器

6

    (5)B用户提交更新至服务器时提示如下:


    B用户将文件提交至服务器时,提示版本过期:首先应该从版本库更新版本,然后去解决冲突,冲突解决后要执行svn resolved(解决),然后在签入到版本库。在冲突解决之后,需要使用svn resolved(解决)来告诉subversion冲突解决,这样才能提交更新。

    2.冲突处理

    方法一:放弃自己的更新,使用svn Revert(回滚),然后提交。


    当使用svn revert时不需要再用svn resolved来删除临时文件了,因为撤销会恢复所有的文件到修改前,除了已删除的文件。

    方法二:放弃自己的更新,使用别人的更新。使用最新获取的版本覆盖目标文件,执行resolved filename并提交(选择文件—右键—解决);


    方法三:手动解决,冲突发生时,通过和其他用户沟通之后,手动更新目标文件。然后执行resolved filename来解除冲突,最后提交。

    (1)手工合并冲突文件:当查看了具体出冲突的文件后,可以打开该文件,找到冲突的标志。
      Top piece of bread
      Mayonnaise
      Lettuce
      Tomato
      Provolone
      <<<<<<< .mine
      Salami
      Mortadella
      Prosciutto
      =======
      Sauerkraut
      Grilled Chicken
      >>>>>>> .r2
      Creole Mustard
      Bottom piece of bread
      小于和大于符号之间的就是冲突的地方,如果有能力在修改完文件并且删除冲突标志之后,进行svn resolved来删除三个临时文件
      注:如果修改时不是很明白,可以参考冲突时的三个文件
 
    (2)复制某一工作文件(一般用的不是很频繁):如果只是希望取消本次的修改,你可拷贝svn为你生成的文件替换你的工作拷贝
      $ svn update
      C practice.txt
      Updated to revision 2.
      $ ls practice.*
      practice.txt practice.txt.mine practice.txt.r2 practice.txt.r1
      $ cp practice.txt.r2 practice.txt(这里r2是版本库里你此次更新前的版本文件)
      $ svn resolved practice.txt(用来删除三个临时文件)


     OK!冲突解决!

11

    提交更新!



    总结

    有时候冲突是不可避免的,但是我们可以尽量降低冲突的复杂度,具体解决方式有: 

    1、当文档编辑完成后,尽快提交,频繁的提交/更新可以降低在冲突发生的概率,以及发生时解决冲突的复杂度。

    2、在提交时,写上明确的message,方便以后查找用户更新的原因,毕竟随着时间的推移,对当初更新的原因有可能会遗忘。

    3、养成良好的使用习惯,使用SVN时每次都是先提交,后更新。每天早上打开后,首先要从版本库获取最新版本。每天下班前必须将已经编辑过的文档都提交到版本库。



0 0