我怎么能相信Git合并?

时间:2014-05-07 16:50:14

标签: git merge

我不确定我是否可以信任Git自动合并。这是一个场景。

在主人中创建一个程序:

    MOVE 0 TO I.
A.
    PERFORM X-PROC.
    IF I IS EQUAL TO 25 THEN GO TO A.

开发人员1制作了一个分支,并注意到存在一个错误:无限循环。他解决了这个问题:

    MOVE 0 TO I.
A.
    ADD 1 TO I.
    PERFORM X-PROC.
    IF I IS EQUAL TO 25 THEN GO TO A.

同时,Developer 2以自己的方式创建了一个分支并修复了错误:

    MOVE 0 TO I.
A.
    PERFORM X-PROC.
    ADD 1 TO I.
    IF I IS EQUAL TO 25 THEN GO TO A.

两位开发人员都测试他们的代码并发现它是正确的。两者都合并到主人:

    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.

无限循环回来了。

在我看来,这个问题必定经常发生在任何类型的分布式开发环境中。当我测试这个时,Git没有报告合并冲突。有时这个问题很长时间都不会被发现。回归测试应该找到它,但回归测试也在Git中合并,所以我们也不能信任它们。

我该怎么办?每次合并后我是否需要进行代码阅读?

1 个答案:

答案 0 :(得分:9)

  

每次合并后我是否需要进行代码阅读?

是的,当然。

Automerge算法很有帮助,但它们并不神奇;它们只包含对文件两面所做的更改,如果它们不冲突的话。不能保证由此产生的变化可以编译甚至不是胡言乱语。无法保证逻辑不是完整的火车残骸。 (有人推测Heartbleed错误是automerge巧妙地改变逻辑的结果,并没有被审查。)

任何执行automerge的版本控制工具都是如此(假设您使用的是过去15年左右写的东西,几乎可以肯定。)虽然这不是为了弹出automerge,这解决了对同一文件进行两次更改,通常做得很好;一般情况下合并也是如此。如果您修改某个文件A并修改了某个文件B,则无法保证合并有意义。

最佳做法:在提交或推送合并之前,您应该始终检查合并,即使它们成功自动充电也是如此。