Git推送到一个远程仓库,该仓库部署到多个其他远程存储库

时间:2012-12-13 22:43:27

标签: git

我们正在学习Git,并且只想推送到我们的主要Git服务器(git.example.com)。哪个必须部署(基于repo)到其他服务器,如我们的开发网站服务器(dev.example.com)和Redmine(redmine.example.com)项目管理服务器。

我们知道这可以通过工作站上的.git/config中的小配置完成,例如:

[remote "origin"]
    fetch = +refs/heads/*:refs/remotes/origin/*
    url = https://git.example.com/testing.git
    # Development server only needs to serve the files.
    url = https://dev.example.com/testing.git
    # Redmine must be a bare one.
    url = https://redmine.example.com/testing.git

我们对上述解决方案的看法。首先,这将消耗额外的带宽/上传。其次,我们不喜欢这必须在客户端配置:.git/config。反正至少在git.example.com上配置了吗?

对于任何有同样问题的人来说,这个网站对我们帮助很大:Website maintenance with git, the pro way。您可以在该页面底部找到的小片段:

  

根据您的需要,您可能需要调整此过程a   位。假设您只想将更改推送到登台服务器   来自git.example.com上的裸存储库,而不是来自您的家   电脑直接。您可以通过更改remote.staging.push来完成此操作   配置选项来读取   refs/remotes/origin/master:refs/heads/master代替   refs/heads/master:refs/heads/master。如果你有这个可能会有用   需要能够推送到登台服务器的多个开发人员。

我们并不完全理解这种可能的解决方案。但听起来它可以解决我们的问题。我们也正在阅读Git文档,并会让你们发帖。

非常感谢任何帮助。提前谢谢。

1 个答案:

答案 0 :(得分:2)

您可以使用服务器端钩子脚本执行此操作。在这种情况下,您可能希望添加到接收后挂钩,一旦接受更新并将其应用于服务器存储库并且一切都已完成,该挂钩就会运行。我使用这个钩子将git-tfs存储库镜像到一个具有更多历史记录的合适的git存储库,通过将所有补丁重新应用到另一个repo。出于您的目的,只需为每个目标调用git push --mirror就足够了。或者你可以在服务器上运行一个cron作业来定期做同样的事情。

示例post-receive-email挂钩脚本显示了将目标存储库存储为配置变量并在继续之前检查存储库是否处于合理状态时可以获得多少花哨。钩子脚本的任何输出都可以显示给推送用户,如果因任何原因导致失败,这将有所帮助。

最简单的方法是将一些git push --mirror mirror1; git push --mirror redmine行添加到我认为的服务器挂钩/接收后脚本中。