同步

2

我们:同步

  1. 一些项目的远程仓库。
  2. 几个远程存储库,我想与前一个同步。

当在第一个项目(1)中推送某些内容时,我需要将这些更改提交给其他远程存储库(2)。

我可以从第一次回购并推送到目标资源库。

要做到这一点,最简单的方法是什么?

谢谢。

回答

2

您可以从无法控制的上游存储库克隆新的裸镜库,例如,搭配:

git clone --bare --mirror git://github.com/whoever/whatever.git 

(事实上,--mirror意味着--bare,所以--bare不是绝对必要的。)的--mirror选项说,而不是仅仅采取从远程地方分支机构,使他们的远程跟踪分支,混帐应该使用相同的名称镜像远程存储库中的所有分支。

然后,您可以设置一台运行在该库中的下列命令频繁cron作业:

git remote update 
git push --mirror --force repo1 
git push --mirror --force repo2 

这假定您已经添加repo1repo2如遥控器,并且它们指向裸库你只是想用作镜子。 (后者的要求是因为你使用的是--force,所以如果其他人将他们的工作推到repo1repo2,它将被自动镜像推送覆盖。)

+0

我在github存储库上试过这个,但是在 'git push - -mirror --force repo1' 我得到了 '致命的:refspec的远程部分是不是一个有效的名字:能力^ {} 致命:远程端意外挂断' –

+0

@安德鲁Kondratovich:这很奇怪,我可以'再现了这一点。您可能想要通过遍历'git show-ref'的输出中的每个ref来查看是否存在导致问题的特定ref,并尝试单独推送它,例如, 'git push refs/heads/test-branch:refs/heads/test-branch' –

+0

这似乎是问题出现在repo1中。这是新的_empty_回购,所以没有参考。命令'git push --all --force repo1'已成功。我不知道为什么:)按规格 - 这些标志非常相似。 –

1

您可以在第一个远程存储库中设置一个post-receive hook,然后从第一个远程存储库推送到其他每个存储库。

+0

我不能 - 存储库放置不在我的服务器,但在github或gcode上。 –

+0

那么,GitHub至少支持某些挂钩 - 请参阅http://help.github.com/post-receive-hooks/ – Amber

+0

但它不是我的存储库:) –