3

我们正在学习 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 上配置它?

对于任何有同样问题的人来说,这个网站确实帮助了我们很多:使用 git 进行网站维护,专业的方式。您可以在该页面底部找到的小片段:

根据您的需要,您可能需要稍微调整此过程。假设您只想将更改从 git.example.com 上的裸存储库推送到登台服务器,而不是直接从您的家用计算机。您可以通过将 remote.staging.push 配置选项更改为 read refs/remotes/origin/master:refs/heads/master而不是 refs/heads/master:refs/heads/master. 如果您有多个开发人员需要能够推送到登台服务器,这可能会很有用。

我们并不完全理解这种可能的解决方案。但听起来它可以解决我们的问题。我们也在通读 Git 文档,并会及时通知你们。

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

4

2 回答 2

2

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

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

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

于 2012-12-13T23:43:51.943 回答
1

我们仍在努力改进我们的目标。看起来这个页面会帮助我们:http ://sitaramc.github.com/gitolite/mirroring.html

于 2013-01-21T23:54:02.927 回答