自动同步两个git存储库

时间:2015-05-07 13:22:40

标签: git github

是否可以保持两个Github存储库(远程)的特定文件夹同步?

有两个github回购:repoA和repoB。 两个repos都有名为ABC的文件夹以及其他唯一文件夹。 如果repoA的文件夹ABC中的任何文件中有更新,我想自动更新repoB的文件夹ABC。

3 个答案:

答案 0 :(得分:1)

无法仅将git命令应用于特定文件夹。您需要同步整个回购。

最佳的syn解决方案涉及'post-receive'钩子。但是因为你不能在github中添加钩子(据我所知),那么你唯一的选择就是任何可以“看到”两个repos的机器上的cron作业,然后在那里为两个repos创建一个克隆(使用--mirror选项) )。通过为cron作业设置适当的持续时间,您可以在cron脚本中按如下方式“同步”两个repos:

cd <to-repoA-clone>
git remote update
git push <repoB-url> --all
cd <to-repoB-clone>
git remote update
git push <repoA-url> --all

现在,如果两个repos都修改了文件夹'ABC',那么推送将失败并且您将需要进行合并(也可以自动化,但如果存在任何冲突,仍然会失败)。

此外,如果两个repos的内容完全不同,但文件夹ABC除外,您可能希望将文件夹ABC自行拆分为回购(搜索git filter-branch)。这将使同步更有效。

答案 1 :(得分:0)

我参加聚会有点晚了,但服务Git-hg Mirror也是如此。免责声明:我来自其背后的公司。

答案 2 :(得分:0)

您可以采用多种方式,但不想复制内容。

相反,创建第三个存储库repoC来存储公共ABC文件夹。然后使用git submodule将其添加到repoA和repoB作为子目录。 repoA和repoB中的git submodule add <url-to-repoC> ABC/。现在,您在两个存储库中都拥有ABC/的共享内容。

由于ABC/仍然是自己的存储库,因此对repoA/ABC/所做的任何更改都可以推送到repoC,然后由repoB拉出。对于repoB/ABC/,更改可以推送到repoC并由repoB拉取。有各种方法可以实现自动化,但他们必须在Git之外。