我不确定我是否可以信任Git自动合并.这是一个场景.
在master中创建一个程序:
MOVE 0 TO I.
A.
PERFORM X-PROC.
IF I IS EQUAL TO 25 THEN GO TO A.
Run Code Online (Sandbox Code Playgroud)
开发人员1创建了一个分支,并注意到存在一个错误:无限循环.他解决了这个问题:
MOVE 0 TO I.
A.
ADD 1 TO I.
PERFORM X-PROC.
IF I IS EQUAL TO 25 THEN GO TO A.
Run Code Online (Sandbox Code Playgroud)
与此同时,Developer 2创建了一个分支并以自己的方式修复了错误:
MOVE 0 TO I.
A.
PERFORM X-PROC.
ADD 1 TO I.
IF I IS EQUAL TO 25 THEN GO TO A.
Run Code Online (Sandbox Code Playgroud)
两位开发人员都会测试他们的代码并发现它 两者合并到主人:
MOVE 0 TO I.
A.
ADD 1 TO I.
PERFORM X-PROC.
ADD 1 TO I.
IF I IS EQUAL TO 25 THEN GO TO A.
Run Code Online (Sandbox Code Playgroud)
无限循环回来了.
在我看来,这个问题必定经常发生在任何类型的分布式开发环境中.当我测试这个时,Git没有报告合并冲突.有时这个问题很长时间都不会被发现.回归测试应该找到它,但回归测试也在Git中合并,所以我们也不能相信它们.
我该怎么办?每次合并后我是否需要进行代码读取?
每次合并后我是否需要进行代码读取?
当然是.
Automerge算法很有用,但它们并不神奇; 它们只包含对文件两面所做的更改,如果它们不冲突的话.不能保证由此产生的变化可以编译甚至不是胡言乱语.无法保证逻辑不是完整的火车残骸.(有人推测Heartbleed bug是automerge巧妙改变逻辑的结果,并没有被审查.)
对于任何执行automerge的版本控制工具都是如此(假设您使用的是过去15年左右写的东西,几乎可以肯定.)虽然这不是为了弹出automerge,它解决了两个更改相同的文件,通常做得很好; 一般情况下合并也是如此.如果您修改某个文件A
并修改了某个文件B
,则无法保证合并有意义.
最佳实践:在提交或推送它们之前,您应该始终检查合并,即使它们成功自动注册也是如此.