开发工具 Git push 到多个 Repository

Peter · 2013年08月19日 · 最后由 Peter 回复于 2013年08月19日 · 4481 次阅读

需求

本地开发,三台服务器生产,本地 git push, 三台服务器同时更新代码

方案

在三台服务器上初始化三个空的 Repository,也就是说每台服务器下都有这个目录:

/home/user/repository/website.git

本地

cd /home/User/website
git init
git add .
git commit -am "commit"
git remote set-url --add origin user@server1.com:/home/user/repository/website.git
git remote set-url --add origin user@server2.com:/home/user/repository/website.git
git remote set-url --add origin user@server3.com:/home/user/repository/website.git
git push origin master

这样本地的 .git/config 中是这样配置的:

[remote "origin"]
    url = user@server1.com:/home/user/repository/website.git
    url = user@server2.com:/home/user/repository/website.git
    url = user@server3.com:/home/user/repository/website.git
    fetch = +refs/heads/*:refs/remotes/origin/*

再在三台服务器下分别执行:

cd /var/www/
/var/www/ $ git clone file:///home/user/repository/website.git

这样三台服务器都有 /var/www/website 目录

然后在每台服务器的 /home/user/repository/website.git/hooks/ 下配置 post-receive 文件:

#!/bin/sh
unset GIT_DIR
NowPath=`pwd`
DeployPath="/var/www/website"
cd $DeployPath
git fetch origin
git pull
cd $NowPath
echo "Finished"
exit 0

问题

如果我登录第一台服务器,在 /var/www/website 目录下改动某个东西,然后 git push 到第一台服务器的 /home/user/repository/website.git 仓库中,那必然导致三个服务器的仓库内容不一样,我在本地 git pullgit push 就能将三个服务器的仓库更新成一样的吗?

有没有更好的解决方案?

问题写的很清楚,试着回答:把 server 1 也配成推送到 server 2&3 的 repository 目录就可以,也就是搞成原来本地的设置,然后新的本地 local 只推送到 server 1,发布时先发布到 server 1,将 server 1 当作 stage 服务器,没问题的话从 server 1 上推送更新其他服务器

其实我觉得没必要在本地单独搞一个 bare 的 git 目录,一个中央服务器放 bare 的 git repository 足以,开源就用 github,闭源用 gitcafe 即可。

也许还可以试试 capistrano 或者 mina?

#1 楼 @ericguo 谢谢

你的意思是说 local --- push---> Server 1 /home/user/repository/website.git --hooks pull --> Server1 /var/www/website --- Server1 /var/www/website/.git/hooks push ---> Server 2 /home/user/repository/website.git ...

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册