2012-12-13 62 views
3

我们正在学习Git并希望只推送到我们的主要Git服务器(git.example.com)。其中必须部署(基于回购)到其他服务器,如我们的开发网络服务器(dev.example.com)和Redmine(redmine.example.com)项目管理服务器。Git推送到一个部署到多个其他远程存储库的远程回购站

据我们了解,这可以通过一个小的配置来完成:.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

您可以使用服务器端挂钩脚本来完成此操作。在这种情况下,您希望添加到post-receive钩子,该钩子在更新已被接受并应用到服务器存储库并运行完毕后运行。我使用这个钩子将git-tfs资源库镜像到具有更多历史记录的适当git存储库中,方法是将所有补丁重新应用到其他repo。为了您的目的,只需为每个目标调用git push --mirror就足够了。或者你可以在服务器上运行一个cron作业来定期做同样的事情。

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

最简单的将只是将git push --mirror mirror1; git push --mirror redmine行添加到我认为的服务器挂钩/ post-receive脚本。