我一直听说 git 中的分支比 SVN 中的分支要容易得多,因为将分支合并回主干/主干更容易。我已经阅读了一些教程,但它们只涵盖了基本的合并冲突(“Alice 更改了 code.cpp 的第 8 行,同时 Bob 更改了 code.cpp 的第 8 行......”)并且 SVN 和所有其他分布式源代码控制系统。
你能给我一些会在 SVN 存储库中引起麻烦但会被 git 优雅处理的分支更改示例吗?
我终于有时间修补分支/与 git 和 svn 合并,发现杀死 svn 但与 git 完美配合的情况:
假设项目由这些文件组成:
/main.cpp
/sub1/sub1.cpp
/sub1/sub1.h
SVN 丢失了第 3 点中分支中所做的所有更改,git 中的类似更改被完美合并。这足以让我拒绝将 SVN 作为任何需要分支的项目的版本控制系统。
hgInit.com与 Mercurial 相关,但可以很好地概述 DVCS 和 SVN 在合并冲突方面的区别。
Subversion 无法合并的原因与它存储版本历史的方式有关。Subversion 喜欢考虑修改。修订是整个文件系统在某个特定时间点的样子。在 Mercurial 中,您会考虑变更集。变更集是一个修订版和下一个修订版之间更改的简明列表。
因此,Subversion 在合并时比较整个文件,而 Mercurial(或 Git)单独比较每个更改集。在处理变更集时,冲突发生的频率要低得多。