zoukankan      html  css  js  c++  java
  • 解决常见SVN冲突问题(转)

    转自:http://www.w3cfuns.com/blog-5443287-5403523.html

    一个大项目在开发中可能会拆分成几个小项目,分别分去,同时共通的部分再由人做,做完后再统一合并。同时,在开发中,共通的部分修改后,其它人要保持同步。
            
            在这个开发过程中我们就需要用到svn去管理我们的的代码,可是在使用过程中,我们经常可能遇到各种各样的冲突问题,相当的头疼郁闷……,严重影响开发的工作效率
            
            在做总结之前我们先搞清几个概念和规则:
            ①利用svn checkout,upade、merge下来的代码本地,无论你如何操作及时产生冲突,也不会造成主干上面的代码混乱冲突。(记住本地产生冲突,还原到上一个版本就行了,一定不要提交到主干导致主干出问题)
            ②本地代码有冲突一定不可向主干提交代码,解决好了再提交
            ③merge合并代码时,是分支或者主干跟本地的代码进行合并(这个概念一定要理解清楚),出现问题不要慌,大不了重新来过,反正只是本地操作而已
            ④创建分支是可以直接命令branchs/tag或者在trunk Copy to        分支,切勿直接拷贝文件
            ⑤养成开发时将(switch)切换到主干(trunk)创建分支(branchs),上线时切换到主干合并(merge)分支,保持主干的准确性
            


            由于使用svn的过程中遇到的种种坑,对解决冲突问题做一下总结:

            一、svn 提交代码遇到的冲突问题
            
            1. 如果执行svn commit命令时遇到了"xxx is out of date"提示,如下图所示:

            

            那么一般是因为您修改了本地某文件或目录结构,而别人也修改了同一个的文件或目录并且先于您提交到了SVN库。 

            2. 解决的办法是先使用svn update命令获取SVN库上最新修改的文件,这个命令并不会直接覆盖掉您本地所做的修改,SVN客户端会先尝试将SVN库上该文件的修改合并到你的本地文件中。

            如果SVN客户端成功的进行了合并,您可以再次执行SVNcommit命令进行本地文件的提交即可。 

            3. 如果SVN客户端无法进行自动合并(可能因为文件是一些二进制文件,或者两人修改的地方是同一个,或者修改的地方太多等原因),则svn客户端会提示“one or more files are in confict state(遇到这样的英文,就头疼了)”,即告诉您有文件发生了冲突,如下图所示:


            4. 如果是文本文件冲突,则在文件夹下会多出几个冲突文件,如下图所示:
            

            其中:
            -f2是尝试合并的文件,里面有svn客户端加入的一些标记;(这个文件是,合并的文件,里面有注释标记,告诉你那里出现了冲突)
            -f2.r69是您本地修改文件的基础版本,69是版本号;(这个文件时你这个版本的问题,注意,是你没有做更改的版本)
            -f2.mine是您本地修改后的文件,即f2.mine是在f2.r69文件基础上更改的(这个文件时你现在本地改完的版本);
            -f2.r70是服务器上最新版本的文件,即别人修改后提交的文件。(这个文件是线上的最新版本)        


            此时的解决方法有多种:
            (1)比较f2.r70和f2.mine,将您自己做的修改和别人做的修改手工合并,可以下载一个Beyond Compare 比较文件不同,手动做更改,然后把合并后的内容覆盖到f2中。
            最后右键点击f2,然后选择Resovled,之后f2.mine,f2.r69,f2.r70文件都会自动被删除。然后您再次执行svn commit就可以了。如下图所示:

            
            (2)如果要保留别人的修改而放弃自己的修改,则可以删掉f2,f2.mine, f2.r69,f2.r70几个文件,再执行以下update,这样会重新从服务器上把最新文件下载到本地。

            (3)如果是保留自己的修改而放弃别人的修改,则可以删掉f2,f2.r69,f2.r70,然后把f2.mine改名为f2,然后再次执行svn commit,就可以把自己的修改上传到svn服务器。

            5. 如果发生冲突的是二进制文件,此时SVN客户端是无法执行自动合并的,这样目录下只会多出以.rXX结尾的两个文件,而不会出现.mine结尾的文件,此时的处理方法可以参考上面的(2)(3)。


            二、svn 合并分支时遇到的冲突问题
            
            svn 合并分支时,svn后台基本上可以理解成进行了2种操作:①增加本地没有的文件 ②合并本地已有但不同的文件 
            
            1.增加本地没有的文件,并不会造成冲突

            2.合并本地已有但不同的文件 ,如果单单是update就不会造成冲突,一旦出现update不了,svn无法自动识别合并,就会出现conflict冲突,这就蛋疼了。

            针对合并出现的冲突问题,把整个合并过程也图文并茂的讲解一下:



            从主干 ( trunk ) 合并至分支 ( branches) 通常选第 1 个,也就是 [Merge a range of revisions],这个菜单也是我们合并时用的最多的
            
            注意:其实也可以理解为把另一个分支合并到当前分支,这里就相当于把主干当成当前分支,有的版本比较高的svn可能就还有另一个菜单如图所示[Reintegrate a branch],其实它才是在当前分支下,将分支合并到主干的快捷操作,合并完成之后,我们可以删除分支,最后还是推荐大家用第一种 [Merge a range of revisions]
            
            
            

            在 Merge 的窗口有以下注意事项:
            1.合并的来源,由于我们打算从分支 ( branches ) 合并至主干(trunk),所以合并的來源要选 branches /2015.01.07才对!
            2.合并的结果会直接与目前「工作目录」(Working Copy) 做比对,并修改目前工作目录中的所有文件。因此建议在做合并之前可以将所有尚未 commit 的档案先 commit 到版本库,避免不必要的冲突事件发生。
            
            
            如图,可以看到的集中操作,add update没有冲突产生, svn自动合并不了了就会产生冲突

            

            3.当我们点击Edit conflict

            

            在冲突的文件上(选中文件--右键菜单—TortoiseSVN—Edit conflicts(解决冲突)),出现如下窗口

            Theirs窗口为服务器上当前最新版本
            Mine窗口为本地修改后的版本
            Merged窗口为合并后的文件内容显示

            如果要使用服务器版本,在Theirs窗口选中差异内容,右键,选择Use this text block(使用这段文本块)。
            同理如果要使用本地版本,在协商后,在Mine窗口右键,选择Use this text block(使用这段文本块)。


            4、  修改完成后,保存文件内容,提交即可。

            5、  如果另一个用户的冲突目录下,则可选中文件--右键菜单—TortoiseSVN—Resolved(解决)。会列出冲突的文件列表,如果确认已经解决,点OK。


            最后,给大家一些使用svn的建议:

            如何降低冲突解决的复杂度:

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

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

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


            参考资料:
            http://blog.sina.com.cn/s/blog_5f54f0be0101f04y.html
            http://blog.csdn.net/windone0109/article/details/4857044
            http://wiki.open.qq.com/wiki/faq/SVN%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98

    一张网页,要经历怎样的过程,才能抵达用户面前? 一位新人,要经历怎样的历练,才能站在技术之巅?
  • 相关阅读:
    Software Solutions CACHE COHERENCE AND THE MESI PROTOCOL
    CACHE COHERENCE AND THE MESI PROTOCOL
    Multiprocessor Operating System Design Considerations SYMMETRIC MULTIPROCESSORS
    Organization SYMMETRIC MULTIPROCESSORS
    PARALLEL PROCESSING
    1分钟内发送差评邮件
    Secure Digital
    SYMMETRIC MULTIPROCESSORS
    A Taxonomy of Parallel Processor Architectures
    parallelism
  • 原文地址:https://www.cnblogs.com/zdfjf/p/5075721.html
Copyright © 2011-2022 走看看