git多主设置?

时间:2012-11-06 00:44:55

标签: git git-remote multi-master-replication

我的任务是配置以下设置。

目前,我们有一个开源项目的内部规范回购。我们有一个post-receive钩子,可以将任何更新推送到公开的远程存储库。

Joe Public可以从公共回购中获取。

除了收件后挂钩

,没有人会推送到远程仓库

我们有很多用户在内部处理代码,我真的不想搞乱他们已经工作的工作流程。

内部用户从内部规范仓库检查代码并提交相同的内容。

外部开发者必须提交补丁,然后内部用户将为他们提交(审核后)。

此时我们想要开始允许一些外部开发者拥有对存储库的提交权限。

这意味着使远程repo规范化。

这也意味着改变用户的工作流程。除非这里的集体能够提出一些关于git的遗漏。

当前工作流程的快速图表。

内部用户。

从内部仓库克隆。 - >猴子用代码 - >推向内部回购 - > post-receive hook被推送到远程仓库。

外部用户。

从外部回购克隆。 - >猴子用代码 - >通过邮件列表提交补丁 - >内部用户将代码推送到内部仓库 - > post-receive hook被推送到远程仓库。

新工作流程理想!!

内部用户。

从内部仓库克隆。 - >在提供克隆之前,预接收挂钩确保我们从遥控器获得更新的镜像 - >猴子用代码 - >推向内部回购 - > pre-receive hook代理提交远程repo并同步2。

外部用户。

从远程仓库克隆。 - >猴子用代码 - >推送到远程仓库。

这有点像多主设置。您可以将代码推送到repo并从任一repo中提取代码。

其他一些警告。

内部仓库可以从远程仓库推送和拉出。 远程仓库无法到达内部仓库。

你怎么看?

2 个答案:

答案 0 :(得分:0)

这有点令人讨厌,并且有一些工具可以做到这一点 - 但是当任何人对其中任何一个进行更改时,它们通过“锁定”所有存储库来工作。在你的情况下,我认为有一种更简单的方法。

  1. 每个人都推送到远程存储库。内部和外部用户。

  2. cron作业从远程存储库拉到内部存储库。

  3. 假设远程存储库在ssh://remote/dir/proj.git可用,内部存储库在ssh://internal/someplace/proj.git可用。添加到每个人的.gitconfig

    [url "ssh://remote/dir/"]
        pushInsteadOf = "ssh://internal/someplace/"
    

    这意味着克隆内部存储库的任何人仍然可以从附近的服务器中获取很快的速度,但每个人都会推送到同一个远程存储库。一旦.gitconfig以这种方式设置在每个人的工作站上,您只需要clonepush以及pull - 没有额外的标记,没有需要配置东西。

    请注意,这样的设置唯一真正的好处是从内部存储库获取时获得的额外速度。由于cron作业的粒度控制了内部用户获取更改的速度,因此存在一个惩罚 - 但我真的希望你没有一堆猴子在同一个分支处打字。

    关于钩子的注意事项

    Git中没有挂钩,当从中获取存储库时会触发。如果你想在响应git fetch时执行此类操作,则可以使用包装脚本替换git upload-pack,该脚本在调用实际{{1}之前同步两个存储库}}

答案 1 :(得分:0)

我处于非常类似的情况 - 我计划的方法是尝试配置本地仓库以执行从远程执行拉取的预接收挂钩(具有自动接受本地合并冲突),以及post-receive hook推送到远程仓库。另外,我计划设置一个每5分钟左右从远程拨号到本地的cron作业,也自动接受本地合并(因为我无法从远程推送 - >本地)

这样远程用户可以推送他们的仓库,但本地仓库充当“主人”,本地用户可以在本地仓库中工作。我认为自动冲突解决方案存在很多潜在问题。由于我们的CI设置为在提交时每15分钟进行一次构建 - 很快就会发现问题 。现在,如何连接所有这些...我明天就开始......