Git与Subversion在处理多个大型开发分支方面的比较

3

在我的公司,我们目前正在使用Subversion。我们的项目开发流程包括一个“实时”代码分支(这是我们实时网站服务器上的内容),一个用于较小项目的普通开发分支,以及每个较大项目都有自己独立的分支。通常我们会同时开发至少两个较大的项目。将它们合并回实时分支可能会很麻烦,但更麻烦的是当大型项目1上线后,稍后大型项目2也要上线,那个合并过程就会变得混乱不堪。

我在SVN中所做的是每天从live合并到开发分支(包括任何错误修复等)。但是,大型项目合并过程仍然混乱,我想知道使用Git是否会更清晰。例如,有时我们在dev上有一个小功能,将其合并到live,然后在执行live回合并时,SVN会尝试再次将该功能合并回dev(导致冲突),除非我们手动取消合并中的该提交。据我了解,Git足够“聪明”,知道该提交起源于dev,因此不会尝试将其合并回去...但我的理解可能是错误的。我还听说Git更擅长自动处理像我们正在尝试做的复杂合并。因此,第一个问题是:对于我们正在做的事情,Git是否比SVN显着更好,或者我们仍然可能遇到相同的问题和同样棘手的合并?
第二个问题:是否有其他集成方法适用于我们的情况?特别是,我读了一篇关于放纵式集成的文章,看起来不错,尽管随着更多项目同时进行,这似乎会变得指数级难度增加。但话说回来,我不指望我们会同时有三个大项目,通常只有两个。对于我们的许多项目来说,持续集成并不是一个选择,因为它们往往是全有或全无的项目,或者是如果分阶段推送将对用户产生不适感的项目(例如我们最近重新设计的结账流程)。这篇文章也似乎是我们情况下的一个好方法。

3
请查看这个问答,基本上Git在合并方面比SVN更好,因为它们存储信息的方式以及执行合并过程的方式不同。Git存储完整的快照,而SVN存储增量/差异。在合并时,Git执行三方合并,而SVN重新应用补丁/差异。 - KurzedMetal
几周后将有一场关于高级分支和合并的免费网络研讨会。http://go.wandisco.com/advanced-branching-merging.html - vinnyjames
作为一条注释,我们已经转移到Git,并发现它更好用——在合并过程中几乎没有冲突。主要的痛点是当我们将一些代码合并到主分支时,发现了一个严重的漏洞,这个漏洞在QA测试中被忽略了,在主分支上进行了进一步的合并/提交。在Git中撤销这个问题比在SVN中更加困难。但总体而言,Git对我们来说比SVN更好用。 - Mike Todd
5个回答

5
我们允许人们使用他们最舒适的工具。git-svn为那些更喜欢或希望学习git专业开发的人提供了一个类似于git-lite的体验。还有一个名为SubGit的项目,可以让想要使用SVN和Git的人都可以使用。
一般来说,按照特性分支开发风格进行分支/合并的人倾向于使用git。对于几个团队成员独立协作而不需要与整个团队协作的情况下,git也会减少很多开销。

3

尝试使用Git,你不会后悔。

我认为只有在你不合并任何内容(即在小团队的主干上工作)时才应坚持使用Svn。对于其他所有情况,包括你的情况- Git都会让你的生活更轻松。

当涉及到分支、合并和解决冲突时,Git比SVN好得多。想想SVN的“每个分支一个检出目录”的情况。此外,Git在合并/分支方面表现得如此出色,以至于一些人使用git-svn来合并SVN分支。试想反过来会怎样...

此外,这个回答非常好地解释了Git与SVN之间的差异。


3
"Git需要一定的学习曲线" —— 这是事实。然而,在克服了这个学习曲线之后,开发者能够更好地理解源代码控制系统的概念。他们变得更有条理,做事情也更加实用。
如果你需要从Subversion迁移存储库到Git,则你的分支布局将不同(以及其他一些事情)。但是历史记录将全部保留。
通常较慢的学习曲线的一个原因是许多命令具有不同的名称,需要一些时间才能理解。
对于大型数据量的存储库,Git不太擅长处理。然而,您可以始终将系统进行模块化并提取其中的部分。这种概念的好处在那些有数不清的恶心遗留设计的公司和企业中通常没有得到足够的理解。如果您有一个巨大的存储库(例如通常在SVN / Perforce等下),则所有项目的所有代码都在一个地方。但是,Git允许您在本地克隆中保留整个项目的所有历史记录。想象一下,如果您已经适当地对所有内容进行了模块化,您可以以单个实体的方式检出完整的模块历史记录。Git遵循"每个项目一个存储库"的原则(至少大多数人已经采用了这种方式)。维护小型代码树始终更简单、更快速和更整洁。分支合并,重写历史记录,将带有其历史记录的目录提取到单独的新存储库中...所有这些都是非常容易的。
Git是您肯定应该尝试的东西。即使你害怕它也是如此。阅读ProGit书籍。它很好,具有出色的示例和解释。你很快就会发现Subversion的局限性。我曾经从CVS早期就开始使用它,然后迁移到Subversion并管理了很多年。当我开始处理git(一旦我读过这本书),我真正意识到这个版本控制有多聪明。
真的,如果你尝试了它并花了一些时间来学习它,你就不会回头了。
如果您想要快速入门并快速学习它,我建议在GitHub上设置一个项目并进行一些操作。他们有出色的解释来帮助您快速入门。

0

我认为如果你习惯使用SVN,就继续使用它。Git非常好,但你仍然需要学习曲线,并且开始使用它会产生一定的干扰。SVN工作得很好,所以也许你可以改进公司的“分支”和“项目”结构。听起来你们有一个与工具无关的结构问题。无论如何,这只是我的个人意见。希望能对你有所帮助。


0
较大的项目合并过程仍然混乱不堪,我想知道使用Git是否会更加清晰。
不。你的问题不是(大多数情况下,我可以理解流程),而是开发过程的组织和管理方面的更重要的问题。改变工具并不能消除坏习惯。
你的主要问题不是“糟糕的合并”(顺便说一句,我从未见过所描述的“反向合并怪异”,而是经常使用同步合并到分支中 - 然后将这些分支合并到主干中),而是“思维混乱”。Git-merge通常更加健壮,但你会踩到其他更多的陷阱,这在Git中更为常见。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接