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
文章很好,很有用,学习了。
开发机制问题吧。。。为什么有些人会没有svn帐号。。。
难道还有人专门负责commit?
写的挺好的,顶你一下