Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么';SVN和Git在合并方面有什么区别?_Svn_Git - Fatal编程技术网

什么';SVN和Git在合并方面有什么区别?

什么';SVN和Git在合并方面有什么区别?,svn,git,Svn,Git,正如标题所示,我很好奇为什么这么多人将Git吹捧为SVN上分支/合并的更好选择。我主要是好奇,因为SVN合并很糟糕,我想要一个替代解决方案 Git如何更好地处理合并?它是如何工作的 例如,在SVN中,如果我有以下行: 你好,世界 然后user1将其更改为: 你好,世界!一, 然后user2将其更改为: 你好,世界!十二, 然后user2提交,然后user1提交,SVN会给您一个冲突。Git能解决像这样简单的问题吗?在使用冲突合并时调用,没有人能为您解决这个问题。 您必须自己手动解决合并问题 如中

正如标题所示,我很好奇为什么这么多人将Git吹捧为SVN上分支/合并的更好选择。我主要是好奇,因为SVN合并很糟糕,我想要一个替代解决方案

Git如何更好地处理合并?它是如何工作的

例如,在SVN中,如果我有以下行:

你好,世界

然后user1将其更改为:

你好,世界!一,

然后user2将其更改为:

你好,世界!十二,


然后user2提交,然后user1提交,SVN会给您一个冲突。Git能解决像这样简单的问题吗?

在使用冲突合并时调用,没有人能为您解决这个问题。
您必须自己手动解决合并问题

如中所述,实际的区别在于提交的历史记录:

  • SVN的线性化
这使Git能够记住已经合并的内容,从而大大减少冲突的发生

因此,当需要从5b合并到(a)分支时,我们可以使用DAG中的信息来知道3b和2b已经完成了


因此,Git将比SVN更优雅地处理

具体例子请参见。

您提到的具体冲突总是无法解决的。合并工具根本无法知道应该保留哪个版本

不过,Git在处理可解决的冲突方面可能比SVN更好。它的主要合并策略是递归的,它查找更改同一文件的两个提交的共同祖先,并执行三方合并。它还具有一些内置功能,用于记录和重用冲突解决方案()以及各种其他特殊情况

Git在合并中的优势在于它是历史的一部分。合并提交是具有两个父级的提交。Git的历史模型(一个有向无环图)期望有这样的提交。这意味着在未来的工作中,进一步的合并应该如何进行。总是。(是的,有时会有冲突,但它们是真正的冲突,而不是无法处理合并。)


另一方面,SVN只是试图跟踪合并发生的位置,但它的模型本质上仍然是线性的。历史记录仍然只有一个提交字符串,合并跟踪信息提供了额外的帮助。据我所知,SVN不能总是正确处理更复杂的合并模式。(一个例子是反射合并-将a合并为B,然后将B合并为a)。

我是第一个!50秒!。。。但让我们面对现实吧,你的答案更详细、更准确;)+1@VonC当前位置:但您的图片很漂亮,并提供了关于SVN无法合并的答案链接,我无法提供任何详细信息+1!@杰弗洛米:是的,我喜欢漂亮的画;)我刚刚添加了对另一个SO问题的引用,它很好地说明了(SVN)管理您在回答中提到的“更复杂的合并模式”的困难。这使Git能够记住已经合并的内容。但是,Subversion会跟踪已经合并的内容。Subversion合并确实存在问题,但不记得合并的内容不是问题之一。@VonC Git等工具的问题在于,它们会增加流程的复杂性(您现在有两个repo),并使大部分流程不可见。虽然用户有自己的私人回购协议,但没有人能看到他们在做什么。Git还可以鼓励用户独立工作。我在自己的山洞里工作。我已经看到了DVC在哪里工作得很好,在哪里它们可能会失败得很惨。合并可能更容易,但人们可能会做得更少。毕竟,在发布之前我不需要交付我的东西。让我来完善一下。@voncgit和SVN有不同的优势和劣势。然而,归根结底,Subversion确实跟踪合并,并且不会两次合并。你不能简单地说Subversion没有。git比svn更不能读懂你的心思。