【问题标题】:What makes Git better than Subversion for merging? [duplicate]是什么让 Git 在合并方面比 Subversion 更好? [复制]
【发布时间】:2011-05-12 00:52:20
【问题描述】:

可能重复:
Merging: hg/git vs. svn

我听说/读到 Git 和 DVCS 通常比 Subversion 和集中式版本控制系统更好。我听说的原因之一是 DVCS 中的合并比集中式系统中的好得多。

在合并方面,两者有什么区别?例如,当您重新集成分支时,是什么让 Git 比 Subversion 更好?

【问题讨论】:

  • 我认为很多“SVN 合并辩论”来自 DVCS 爱好者。合并是 SVN 比 CVS 改进很多的事情之一,但 CVS(当之无愧的)坏名声可能会反映在 SVN 上。在我们的团队中,我们在 SVN 中合并了很多,我不知道有什么问题。

标签: svn git dvcs branching-and-merging


【解决方案1】:

Linus torvalds 做了一个关于 git 的演讲,available on youtube,值得一看。在其中,他驳斥了除 git 之外的所有源代码控制解决方案,然后解释了为什么 git 很棒。

就个人而言,我发现 git 令人沮丧,我每天都专业地使用 SVN。我认为 svn 足够快,并且分支和合并足以满足我的需要。

但我不是源代码控制专家!

【讨论】:

  • 嗯,他有点解释说 git 很棒,但并没有说明 如何 git 变得很棒。例如,他说 git 跟踪整个项目而不是单个文件。但是,将文本移动到另一个文件并同时进行更改的简单实验仍然会给我带来合并冲突。
【解决方案2】:

与其说它们是分布式的,不如说是它们跟踪变更集而不是版本。 (但是,分布式系统通常使用变更集,而集中式系统通常使用版本;这是因为分布式系统无法使用基于版本的方法,而集中式系统可以摆脱它)。

Subversion 说,好吧,首先我有这个版本,然后我有那个版本。然后当需要合并时,它会获取两个版本,比较它们,并就如何合并它们做出有根据的猜测。 Git、mercurial 和类似的 SCM,比如说,好吧,首先我什么都没有,然后有人做了这个更改,然后其他人做了那个更改,等等。当它是合并时间时,基本上他们需要做的就是应用正确的更改顺序,在这里和那里更正行号并考虑文件重命名,但基本上就是这样。

Subversion 没有足够的信息来执行智能合并:它只看到差异,但看不到它们的来源。

【讨论】:

  • Subversion 不能遍历修订以找到相同的信息吗?
  • @Lasse:当然有。如果不是r1r2 之间的变化,r1r2 之间有什么区别?这个论点真的让我无法理解。
  • 好吧,如果 Subversion 只查看原始文件,然后查看最终结果,它将丢失所有中间步骤,其中 DVCS 至少使用这些步骤进行合并。但我的问题是为什么 Subversion 不能分析中间版本来找到这些步骤。我仍在寻找关于 DVCS 合并的魔力从何而来的一个很好的解释。
  • 我会买那个,但是争论并不是说 DVCS 在合并方面比 CVCS 更好,而是我们通常选择的实现更好。换句话说,Git 和 Mercurial 比 Subversion 更好,但 Subversion 可能也一样好,如果它只是做不同的事情但仍然是一个集中式 VCS。
  • subversion 有一些糟糕的设计决策,但它们与集中化没有直接关系。
猜你喜欢
  • 2023-03-13
  • 2011-01-08
  • 1970-01-01
  • 2023-04-07
  • 1970-01-01
  • 1970-01-01
  • 2016-08-18
  • 1970-01-01
  • 2012-02-14
相关资源
最近更新 更多