GIT钩子后接收和远程存储库git pull

时间:2011-07-30 08:33:15

标签: git

我目前正在研究如何使用GIT post-receive hook来实现以下场景。

我有三个远程存储库位于不同的远程服务器上。

服务器A,服务器B和服务器C

我想将我的工作推送到服务器A,并且还使用服务器A上的post-receive挂钩自动执行来自服务器B和C的GIT拉取,同时更新他们的存储库。

我已经在我的本地PC上测试了这个场景,在同一台计算机上创建了三个不同的存储库来模仿三个远程服务器存储库。到目前为止,它工作正常,但是当我把这个想法应用到远程存储库时,它很难。

我想知道是否有人知道如何实现这种情况,或者您是否有任何想法或经验。

非常感谢您的帮助。

由于 Finau

1 个答案:

答案 0 :(得分:10)

如果我正确地阅读了您的问题,Server BServer C的唯一目的就是备份Server A,对吧?

在这种情况下,您无需从Server B告诉Server Cpull A,而是从A推送到{{1} }和B。因此,收到后挂钩的内容将是

C

假设git push --mirror server_b git push --mirror server_c server_b已知server_c上的遥控器。有关A标志的说明,请参阅git push的文档。

如果您希望--mirrorB成为活动部分,请定期将{cron作业设置为C


另一种方法是在本地仓库中定义一个具有三个URL的远程站点:

git fetch A

现在,当您通常使用[remote "multi"] url = server_a/repo.git url = server_b/repo.git url = server_c/repo.git 将工作推到A时,只需执行

git push

同时推送git push --mirror multi AB上的所有本地广告。


另一个问题是:为什么要推到CB?看起来你只是出于备份的原因这样做。您是否知道每个仓库(您的工作副本,C上的那个,...)包含您的开发历史记录?它不像SVN,你有一个中心历史。 Git是一个DVCS,每个工作副本都有完整的历史记录。

因此,使用Git,只有在同时所有 repos被销毁时,您的历史才会丢失。否则,您将始终至少拥有一个包含项目历史记录的仓库。有关这方面的一些注意事项,另请参阅Pro Git的介绍章节。