4

我一直听说 git 中的分支比 SVN 中的分支要容易得多,因为将分支合并回主干/主干更容易。我已经阅读了一些教程,但它们只涵盖了基本的合并冲突(“Alice 更改了 code.cpp 的第 8 行,同时 Bob 更改了 code.cpp 的第 8 行......”)并且 SVN 和所有其他分布式源代码控制系统。

你能给我一些会在 SVN 存储库中引起麻烦但会被 git 优雅处理的分支更改示例吗?

4

2 回答 2

3

我终于有时间修补分支/与 git 和 svn 合并,发现杀死 svn 但与 git 完美配合的情况:

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

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

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

于 2010-04-19T14:11:16.847 回答
2

hgInit.com与 Mercurial 相关,但可以很好地概述 DVCS 和 SVN 在合并冲突方面的区别。

Subversion 无法合并的原因与它存储版本历史的方式有关。Subversion 喜欢考虑修改。修订是整个文件系统在某个特定时间点的样子。在 Mercurial 中,您会考虑变更集。变更集是一个修订版和下一个修订版之间更改的简明列表。

因此,Subversion 在合并时比较整个文件,而 Mercurial(或 Git)单独比较每个更改集。在处理变更集时,冲突发生的频率要低得多。

于 2010-03-30T09:23:59.657 回答