SVN冲突不报之情况分析

SVN有冲突时会显示红色,但是,有一种情况却是显示灰色,也就是,它没有提示冲突,但确实覆盖了别人的内容。具体情况是:

现在开发团队有两类人,一类人拥有SVN帐号(A和B),另一类人没有SVN帐号(C),只能从B那里拷贝代码,修改后再拷回给B去commit(团队开发机制就是如此,有待改进,但不是本文讨论话题)。最开始的文件版本为1,A/B/C都已经拿到这个文件,内容如下:

最开始的第1行

接下来,A和C分别向这个文件添加了1行代码,A commit上去,现在版本为2,内容如下:

最开始的第1行
A添加的第2行

C修改后的文件,还未commit上去,内容如下:

最开始的第1行(C在这里添加了内容)

B将版本为2的文件update下来。这时,C将其修改后的文件交给B。由于这个文件一般情况下是C才会去修改的,所以,B将内容全选后粘贴进版本为2的文件,这时commit并未报任何冲突。

这个问题一句话总结,就是新版本、旧内容。造成的效果,就是SVN认为B在第1行加了内容,而删掉了第2行,所以,当然就不报任何冲突啦。而实际上,B是不想删掉第2行的。

解决的方法当然就是要求B在commit时点开每个文件来看不同的地方,但是这样是很耗时间的,特别是因为B承担了N个程序员的commit工作。

本来这是一个很小的问题,但是当A和B是合作关系,而不是同个组织中的时候,A的领导不理解为何你删了我的代码还说没冲突,双方就会为此浪费很多时间。

事实上,A恰恰只添加了一句代码,真的是一句代码引发的纠纷。

3 Comments

  • 1
    2008/12/11 - 13:43 | Permalink

    文章很好,很有用,学习了。

  • 2
    vivi
    2009/02/10 - 17:02 | Permalink

    开发机制问题吧。。。为什么有些人会没有svn帐号。。。
    难道还有人专门负责commit?

    teochew 于 2009-2-19 23:38:39 回复

    确实是开发机制的问题,有人负责commit

  • 3
    2009/05/09 - 09:13 | Permalink

    写的挺好的,顶你一下

  • 发表评论

    电子邮件地址不会被公开。 必填项已用 * 标注

    *

    您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>