将Git push到一个远程仓库,该仓库部署到多个其他远程仓库

3
我们正在学习Git,并希望只推送到我们的主Git服务器(git.example.com)。该服务器必须根据仓库部署到其他服务器,例如我们的开发Web服务器(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。可以在该页面底部找到一个小片段:
根据您的需求,您可能需要调整此过程。假设您只想从git.example.com上的裸仓库推送更改到暂存服务器,而不是直接从家里电脑推送。您可以通过将remote.staging.push配置选项更改为refs/remotes/origin/master:refs/heads/master而不是refs/heads/master:refs/heads/master来实现这一点。如果您有多个开发人员需要能够推送到暂存服务器,则这可能很有用。
我们并不完全理解这个可能的解决方案。但听起来它可能是我们问题的解决方案。我们还在阅读Git文档,并将与大家保持联系。
非常感谢任何帮助。提前致谢。
2个回答

2
您可以使用服务器端挂钩脚本来实现此操作。在这种情况下,您需要添加到post-receive挂钩中,该挂钩在更新被接受并应用于服务器存储库以及所有已完成的内容后运行。我曾经使用此挂钩将git-tfs存储库镜像到一个真正的git存储库中,通过将所有补丁重新应用到其他存储库中来获得更多历史记录。对于您的目的,只需为每个目标调用git push --mirror可能就足够了。或者您可以在服务器上运行cron作业以在定期间隔内执行相同的操作。
示例post-receive-email挂钩脚本显示了存储目标存储库作为配置变量并在继续之前检查存储库是否处于合理状态时的高级设置。挂钩脚本的任何输出都可以向推送用户显示,这有助于解决任何失败原因。
最简单的方法只是在服务器hooks/post-receive脚本中添加一些git push --mirror mirror1; git push --mirror redmine行。

1

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