同步2个mercurial存储库

时间:2011-10-12 11:13:00

标签: mercurial repository

假设我们有以下开发设置:

  • 位置A的第1组,其中包含所有这些团队工作的中央mercurial repo
  • 位置B的第2队(来自世界各地的第1队,并且网络连接不稳定)和自己的中央mercurial repo所有这些团队的工作都被推送

如何安全地同步第1组和第2组的中央存储库,而不会遇到合并/多头等问题?

我认为从其中一个存储库(例如位置A)到另一个存储库的预定推/拉可以处理这个,但是如何处理涉及多个头的情况?

例如: 团队1推动提交,同时团队2也推动。现在,当位置A中的仓库拉动变化时,它会得到多个头。现在我该怎么办?这里的解决方案是让团队1的开发人员(在位置A)合并头部并将他们推回到他的中央仓库,以便下一个预定的推送到位置B推动合并吗?如果团队2已将其他更改推送到其中央存储库,这会导致问题,对吗?

这种问题还有其他解决办法吗?

我想避免的是团队2必须等待其互联网连接稳定以将其变化推回到团队1 ...

我很高兴这里有任何帮助; - )

3 个答案:

答案 0 :(得分:2)

如果两个团队都在使用公共代码库(即repo中存在单个祖先),我无法看到(除了来自匿名分支的强制合并头)同步过程中的任何问题 - 它是标准分支工作流之一“分支与克隆“

  • Team2中的SyncMaster在hgrc:RepoTeam1和RepoTeam2
  • 的[路径]部分创建自己的2个URL
  • 他从所有现有分支机构(如果存在)合并两个仓库,合并头(R2和R1)
  • 将合并结果推送到R1和R2

回购之间分支层面的分离可能有助于合并更轻松地完成工作

答案 1 :(得分:1)

推送和拉动永远不会受到合并冲突的影响。因此,两个团队仍然可以独立工作。最后,有人必须将多个头从他的中心位置拉到他自己的存储库并合并头部。

答案 2 :(得分:0)

基本规则是,永远不要把新头推到远程存储库。因为如果你这样做,你将创建突然出现在他们必须合并的另一个团队的存储库中的头,这是令人困惑的。如果您尝试这样做,Mercurial会抱怨这个,除非您指定--force参数。

但除此之外它是非常标准的票价;你指定一个或多个负责合并两个存储库的人(每天左右),然后从两个分支中拉出所有更改,合并两个头,然后将结果推回到两个存储库,就像任何团队成员必须做的那样。如果在合并时推送了某些内容,则必须先进行另一次合并(希望没有冲突)。

要部分自动执行此操作,您可以在两个团队存储库服务器上设置推后挂钩,该服务器将更改异步推送到另一个服务器,并向负责合并的人员发送电子邮件,如果它失败,因为它会创建远程头。由于服务器不同步的时间窗口不是很长,因此大多数情况下这可能会成功。它应该包括一些逻辑,如果它已经推送则不推送,并且如果连接断开则稍后重试。