代码之家  ›  专栏  ›  技术社区  ›  chalup

在合并冲突解决方面,git和svn有什么不同?

  •  4
  • chalup  · 技术社区  · 16 年前

    我一直听说git中的分支比svn中的分支容易得多,因为将分支合并回trunk/master更容易。我读过一些教程,但它们只涉及基本的合并冲突(“alice更改了code.cpp的第8行,同时bob更改了code.cpp的第8行…”),svn和所有其他分布式源代码管理系统之间没有区别。

    你能给我一些例子吗?分支的变化会给svn存储库带来麻烦,但是git会处理得很好。

    2 回复  |  直到 16 年前
        1
  •  3
  •   chalup    16 年前

    最后,我花了一些时间修改分支/合并git和svn,发现了一个杀死svn但与git完美结合的案例:

    假设项目由这些文件组成:

    /main.cpp
    /sub1/sub1.cpp
    /sub1/sub1.h
    
    1. 创建分支
    2. 在trunk中,将sub1.*移动到根目录,删除sub1子目录。
    3. 在branch中对/sub1/sub1.cpp进行一些更改
    4. 在trunk中对/sub1.cpp进行一些更改
    5. 合并分支和主干。

    svn将丢失在第3点中的分支中所做的所有更改,git中的类似更改将完全合并。这足够让我拒绝svn作为任何需要分支的项目的版本控制系统。

        2
  •  2
  •   Benjamin Ortuzar    16 年前

    hgInit.com 与Mercurial相关,但将为您提供一个非常好的概述,说明DVCS和SVN在合并冲突方面的区别。

    颠覆有麻烦的原因 合并与它的方式有关 存储版本历史记录。颠覆 喜欢考虑修改。一 修订是整个文件的内容 系统看起来像是 时间点。在多变的环境中,你认为 关于变更集。变更集是 以下更改的简明列表 一次修订和下一次修订。

    因此subversion在合并时比较整个文件,而mercurial(或git)则分别比较每个更改集。在处理变更集时,冲突发生的频率要低得多。