Git 分支与 SVN 分支有何不同



我即将从SVN迁移到Git。

我读到的所有关于迁移的文章都谈到了在SVN上使用Git意味着一直分支。

我不明白的是 Git 分支与 SVN 分支有何不同。它们有何不同?

我认为主要区别在于:

在 git(以及所有其他分布式版本控制 (DVCS( 系统中(,每个开发人员始终隐式地拥有自己的分支,因此合并很容易,因为如果合并很难,系统将无法使用。在 DVCS 中,合并在历史记录中很明显,因为它们具有多个父变更集。

在SVN中,每个人都有完全相同的项目树,只有当你明确要求一个分支时,你才会得到一个分支。合并在SVN中很难。很长一段时间甚至根本不支持自动合并,后来使用特殊的"svn:mergeinfo"属性附加了它们,该属性可以由用户修改,从而搞砸了一切。合并根本不会显示在历史记录中,除非您阅读此特殊属性并手动重建所发生的情况。

一直在使用SVN,所以你已经接受了"合并很难,因此分支不好"的训练。您需要忘记所有的SVN训练。DVCS是不同的。合并是你的朋友。每次提交时都会发生分支;因为不一定有中央服务器,所以任意数量的人都可能使用同一父级提交任意数量的变更集,并且所有这些变更集最终都必须合并**在一起。

本教程适用于 Mercurial(另一个 DVCS(,但这些概念也适用于 git。它很好地涵盖了这些概念,是为来自SVN的人设计的:http://hginit.com

**特别是在 git 中,人们通常会变基而不是合并,但这是相同的基本思想,并不是每个团队都鼓励这样做。

最新更新