|
cvs/svn 确实有冲突检测功能, 不过总感觉这个功能反而会造成源码的不完整。
例如两个文件a.h a.cpp
a.h 内定义一个类
class a{
int n;
void func1();
void func2();
}
如果 a.cpp 如下
int a::func1(){
n = 2;
printf("func1\n");
}
int a::func2(){
printf("func2\n");
}
现在两个人都 checkout 到这个版本,
第一个人将 a.h 内的 int n 这一行删除, a.cpp 内的 n= 2你这一行也删除 然后提交。
第二个人在 func2 中增加一行 n = 3, 然后提交, 自然是提交不了的, 于是 先 update,
由于 第二个人没有修改 a.h, 于是来自服务器的a.h覆盖了他本地的 a.h, a.cpp是两个人都
修改了的, 但一个人修改在 func1, 一个人修改在 func2, cvs/svn 认为可以自动合并, 于是
自己干了这件事, 最后进行提交, 那么最后的版本是什么呢?
a.h 是没有 n 定义被删除, 而 a.cpp func2中有 n = 3这样的表达式。 这样, 本来两个人的修改都是语法正确的, 先不管两个人做得事情互相冲突, 但经合并后的代码两个人的修改各保留一部分, 反而造成了无法通过编译的一个现状.
没有亲自试验, 不过推向开来, 应该没错的。 |
|