自动同步两个git仓库

4

是否可以同步两个Github仓库(远程)中特定的文件夹?

有两个Github仓库:repoA和repoB。这两个仓库都有一个名为ABC的文件夹,还有其他各自独有的文件夹。如果在repoA的ABC文件夹中有任何文件更新,我希望自动更新repoB的ABC文件夹。


你找到解决方案了吗? - rohit
3个回答

1

我来晚了,但是使用Git-hg Mirror这项服务也是可行的。免责声明:我来自该服务背后的公司。


1
无法仅对特定文件夹应用 git 命令。您需要同步整个仓库。
最佳同步解决方案涉及“post-receive”钩子。但是,由于您不能在 GitHub 中添加钩子(据我所知),因此您唯一的选择是在任何可以“查看”两个仓库的计算机上运行 cron 作业,然后为其中的两个仓库创建克隆(使用 --mirror 选项)。通过适当设置 cron 作业的持续时间,您可以在 cron 脚本中按如下方式“同步”这两个仓库:
cd <to-repoA-clone>
git remote update
git push <repoB-url> --all
cd <to-repoB-clone>
git remote update
git push <repoA-url> --all

现在,如果两个仓库都修改了文件夹“ABC”,那么推送将失败,您将需要进行合并(这也可以自动化,但如果有任何冲突,它仍将失败)。
另外,如果两个仓库的内容除了文件夹ABC之外完全不同,您可能需要将文件夹ABC拆分为一个单独的仓库(搜索git filter-branch)。这将使同步更加高效。

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之外。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接