询问关于svn commit时一个疑问
目前我准备用AnkhSvn 与 subversion来做代码管理。我有一个困惑:
假如原来有一段代码
for(int i = 0;i < count;i++)
{
GetAsString(_T("name"),i); //错的,因为GetAsString是从1开始,而不是0开始的。
}
上面这段代码是有错的
---------------
此时,员工A发现后,先执行"update to latest version",然后把代码改成
for(int i = 1;i <= count;i++)
{
GetAsString(_T("name"),i); //对的
}
同时员工B也发现了,先执行"update to latest version",因为他紧接着A马上也发现了,A的修改此时还没提交,
也就是说B从服务器上更新下来后代码是:
for(int i = 0;i < count;i++)
{
GetAsString(_T("name"),i); //错的
}
然后B也改代码
for(int i = 0;i < count;i++)
{
GetAsString(_T("name"),i+1); //对的
}
此时A先提交,然后B提交。A可正常提交,B提交时,提示冲突。
这时B按提示要求,先再"update to latest version"一次,此时变成
for(int i = 1;i <= count;i++)
{
GetAsString(_T("name"),i+1); //这时又变错了
}
此时SVN并不会出现冲突的符号。于是B直接就commit。
导致了服务器上的代码错误。
-----------------------------------------------------
我用了后,发现SVN怎么会有这么大的漏洞,会不会易做图作流程有问题啊
--------------------编程问答-------------------- 应该有独占签出吧,或者合并是仔细看代码。。。 --------------------编程问答--------------------
既然此时已经发现错误了(靠程序员自己的脑子),就不应该继续签入,而是应该立即修改
(此时肯定不会再提示冲突,因为检查冲突的算法只是知道这次B修改了i为i+1,这时这一行与其他人手里的版本已经没有冲突了) --------------------编程问答--------------------
独占没有必要,那完全把SVN的优势都抹杀了。仔细看代码倒是真的 --------------------编程问答-------------------- B[update] 之后,会提示有冲突,他应该先修改,测试成功之后,才能[commit]到服务器。
只能把正确运行,经过测试的代码 commit到服务器。
养成一个习惯和制度之后,就没有问题了。
--------------------编程问答-------------------- 如果你觉得还是独占更好用,那回到VSS时代吧
补充:.NET技术 , C#