Mercurial或git比svn对分支/合并有什么好处?

yve*_*mes 4 svn git merge mercurial

我听说过,例如将分支与git或mercurial合并比使用svn更容易.

在软件博客上阅读Joel的最后一篇,我并没有明白为什么.你能提供一个具体的例子,与svn相比,与git/mercurial合并导致更少的合并冲突吗?

Pab*_*ruz 5

检查HGINIT.这是关于这个主题的Joel Spolsky(不是他最新的博客文章)的文章/教程.您可能会发现Subversion Re-Education部分特别有趣.

  • 好处主要不是来自更好的冲突解决方案,而是来自有效地始终在您自己的分支上工作,因此您可以在合并之前提交,而不是在提交之前合并.还有很多其他的好处,所有这些都会加起来.你最好的选择可能是安装mercurial并花一个小时进行实验. (2认同)

Ale*_*ell 5

一个简单的例子是git可以自动将合并转换为"快进".例如,假设我有一个看起来像这样的分支:

主:

A ---> B ---> C

我创建了一个基于Master的功能分支,新的提交D和E.

特征:

A --- > B ---> C
                \
                 D ---> E
Run Code Online (Sandbox Code Playgroud)

在svn中,当您将功能分支合并回主服务器时,您必须创建一个全新的提交,在主服务器上应用D和E的更改.所以,它看起来像:

Master:
    A ---> B ---> C -----------------> F
Feature:           \                  /
                    ---> D ---> E -->
Run Code Online (Sandbox Code Playgroud)

在git中,我们可以选择如何将分支功能合并到master中.如果我们做了

git rebase feature
Run Code Online (Sandbox Code Playgroud)

git会自动识别这是一个简单的合并并执行快进合并,这将把新的提交添加到主分支.rebase的结果是:

主:

A ---> B ---> C ---> D ---> E
Run Code Online (Sandbox Code Playgroud)

Master和Feature的头部都指向提交E(换句话说,它们看起来完全相同).快进合并类似于在svn中执行更新时发生的情况.

此外,您可以选择强制git创建合并提交.相反,我们做:

git merge feature
Run Code Online (Sandbox Code Playgroud)

git将创建一个合并提交.合并的结果是:

Master:
    A ---> B ---> C -----------------> F
Feature:           \                  /
                    ---> D ---> E -->
Run Code Online (Sandbox Code Playgroud)

提交F是D和E的组合.

  • 我同意你的观点,Mercurial和Git都认识到这种情况并让你继续工作而不合并是很好的.但我不会说Subversion中的合并是不好的:有些人会认为合并很好,因为它会更清楚地显示正在发生的事情.此外,通过合并跟踪,SVN将知道F是合并D + E的结果. (2认同)