Git 当您试图合并回中继时,DVCS如何缓解直接中继签入的问题?

Git 当您试图合并回中继时,DVCS如何缓解直接中继签入的问题?,git,mercurial,dvcs,Git,Mercurial,Dvcs,我们在我工作的地方使用SVN。大多数工作是在主干上完成的,但有些人选择拉分支来处理大型的、破坏性的功能。我们有一个约定,当我们将一个分支合并回主干时,我们宣布主干被锁定。这一点是为了防止在合并进行时直接提交主干,这需要在将合并提交回主干之前进行另一次向上合并 不用说,人们忽略了这个公告&不管怎样,都要检查一下。(或者他们可能只是些混蛋。随便什么。)我们已经讨论过使用DVCS,这可能会解决这个问题(这似乎是“分布式”概念的内在要求),但由于缺乏使用DVCS的经验,我真的不知道如何使用 使用Merc

我们在我工作的地方使用SVN。大多数工作是在主干上完成的,但有些人选择拉分支来处理大型的、破坏性的功能。我们有一个约定,当我们将一个分支合并回主干时,我们宣布主干被锁定。这一点是为了防止在合并进行时直接提交主干,这需要在将合并提交回主干之前进行另一次向上合并

不用说,人们忽略了这个公告&不管怎样,都要检查一下。(或者他们可能只是些混蛋。随便什么。)我们已经讨论过使用DVCS,这可能会解决这个问题(这似乎是“分布式”概念的内在要求),但由于缺乏使用DVCS的经验,我真的不知道如何使用


使用Mercurial作为我的首选毒药,要进行合并,我会首先从中央回购中提取资金,然后在本地进行合并。如果有人在我的合并完成之前将更改推送到中心,我的推应该仍然失败,因为它将创建一个远程头,对吗?因此,我必须再次拉、合并、构建,在这段时间内,其他人可能已经将其他更改推送到了central。这比SVN的情况如何更好?

因为DVC假设工作将在不同的存储库中完成,然后合并,合并比Subversion合并更聪明-您的拉/合并/构建周期将更快,痛苦更少


但老实说,这听起来更像是一个人员/流程问题,而不是一个技术问题。交流比交换风投更有帮助。

mercurial的好处有三方面

  • 如果您真的愿意,您可以将一个额外的头推送到中央存储库(但这可能不是一个好主意)。Subversion没有“头”的概念,所以你不能这么做

  • 您可以执行迭代合并+提交。因此,您可以从“主干”存储库中提取最新的头部。你会把你的零钱合并在一起。你可以在本地提交。然后,您将从主干中提取任何其他更改,并将它们作为新的更改集合并到以前的合并更改集之上。有了subversion,你无法做到这一点——你必须继续尝试在一次点击中完成合并

  • 合并工具更智能(正如dahlbyk所说),因此这些类型的合并通常更容易实现

  • 但这仍然不是完美的——复杂的合并是困难的,不是(通常)因为风投缺乏,而是因为你需要运用你的大脑来研究如何从每个人(或团队)的工作中挑选正确的部分。这很难实现自动化,所以这是一项缓慢且有时痛苦的工作


    更好的开发流程和沟通有助于,但是,如果您有多个组在同一个文件上执行相对独立的工作,那么您必须在某个地方进行合并。

    到目前为止,从我的角度来看,最大的好处是进行更改的人应该在推送之前在本地合并主存储库中的最新更改

    是的,您完成合并的机会很小,如果主服务器上有新的提交,则必须执行另一个合并,但实际上这不是一个问题,因为a)您不会丢失以前所有的合并工作。您需要合并的只是自上次拉取以来发生的更改。b)根据活动级别和客户回购的数量,您不太可能经常遇到这种情况。如果你这样做了,你可以简单地将你的层次结构增加到另一个层次,让你的客户回购围绕更小的子回购进行分组,子回购可以更容易地合并到主回购中

    这确实是DVCS的一大优势。合并工作不会丢失。一旦您合并了一组更改,就不必再这样做了

    GitHub型号

    GitHub模型确实适用于大型分布式团队。您没有授予每个人写入主repo或repo的权限,而是将该权限授予受信任的少数人,他们通过将合并的更改拉入主repo并控制需要发生的任何小合并来响应请求


    解决这个问题的唯一真正可靠的方法是使用“看门人”模型,无论是人工的还是自动的

    有了人工看门人,只有一个人负责将成品导入主干,所有其他开发人员从不直接推送到主干,只使用他们自己的功能分支。通常把关人是团队领导或负责人

    自动网守有一个特殊的(服务器)软件,它保持合并任务的队列,并在有新请求时进行合并。然后,每个成功的合并都将被推送到主干。失败的合并(由于冲突)将被拒绝,该分支的作者应合并来自主干的最新更改,并因此在向网守重复合并请求之前解决其自身的冲突


    您可以从bzr文档中了解更多关于网关守护者的想法:

    直接中继提交是否会比分支的价值小得多,从而更容易重新合并。但正如其他一些评论者所指出的,SVN迫使你重新审视一切。很多好的回应!向上投票给每个人,但遗憾的是,只有一个,Highlander。当这种情况发生时,通常没有或很少有额外的冲突,所以第二次合并很快。