如何git推送到两台服务器(镜像)

时间:2012-01-29 00:12:40

标签: git

我有两个运行git的服务器,一个安装了gitorious的主实例,另一个安装在云端。我想让他们保持平等。我在本地计算机上执行的每次推送都应该转到两台服务器或主服务器与云同步。我该怎么做?有什么简单的方法吗?应该在我的本地机器还是在主服务器上完成?

3 个答案:

答案 0 :(得分:3)

您可以向单个遥控器添加多个网址。您需要做的是,在本地计算机上,首先创建一个对应于功能强大的服务器的遥控器:

git remote add -m master remotename ssh://gitorious-server/path

您必须将显示服务器的URL重新添加为显式推送URL:

git remote set-url --add --push remotename ssh://gitorious-server/path

然后对云服务器执行相同的操作:

git remote set-url --add --push remotename ssh://cloud-server/path

这应该设置一个配置,每次在本地执行git push时,您的更改将被推送到两个服务器。但是当你运行git pull(或git fetch)时,它只能从功能强大的服务器上获取。如果服务器要保持同步,这应该是所需要的全部。

如果你只是从这个特定的本地机器推送到任一服务器,那么这就是你所需要的。但是,如果从任何其他计算机推送到一台或另一台服务器,则需要在其他每台计算机上执行相同的配置。如果有足够多的计算机使这些计算机变得难以处理,或者其他人对这两个存储库具有写入权限并且您并不完全信任它们以获得正确的配置,那么您最好不要在服务器端执行某些操作。这将是manojlds mentioned的post-receive钩子方法。要明确的是,如果您使用的是post-receive方法,使用我帖子前面部分所述的双URL远程方法。

答案 1 :(得分:1)

理想的方法是在您的gitorious repo上设置post-receive挂钩,推送到您的云仓库。

答案 2 :(得分:0)

最简单的方法是编写一个bash函数并将其应用于~/.profile~/.bashrc~/.bash_profile(假设Unix)示例:

function gitpushall {
   git push -u origin master
   git push -u foo master
}

然后运行source .profile将其应用到您的登录信息并运行gitpushall

相关问题