2011-09-30 20 views
4

我对Git仓库中复制在几个现场的HTTP服务器的Git复制

我的目标是从我的测试服务器到活的HTTP服务器创建复制的问题。所以当我在测试中提交更改时,更改应该也会自动出现在服务器上 我看了一下gerrit2,它看起来不错,但我试图用git来做,但由于git使用post-commit hook,我当然我可以做到这一点

所以我试图在提交后多次推入钩子(因为覆盖似乎是唯一的选择,因为如果我合并会有冲突的机会,最后我想要的东西在我的实时服务器上有乱七八糟的文件......)从测试到现场,首先我得到了一些奇怪的错误,但后来我添加了强制参数并推送成功,但不幸的是,这些更改没有出现在远程服务器上。 我使用ssh协议来交换数据。

如何做到这一点,所以它会很好,可靠?我必须执行的一组命令是什么?

+0

推到在非裸仓库中检出分支通常是不好的;它更新索引而不是工作树。当你做这些推动时,Git本应该相当强烈地警告你。如果你真的想这样做,你需要在另一端运行'git reset --hard'。 – Cascabel

回答

1

正如@Jefromi所指出的,推动并不是一个好主意。

取而代之,您可以尝试通过使用定期运行的脚本(如每小时或每5分钟的倍数)从生产服务器拉动。这样你就会知道服务器什么时候会更新。

但是,如果您在服务器上做任何修改,拉可能会失败,因为它会拒绝更新修改后的文件。您可以让脚本在执行pull操作之前检查工作副本是否脏,并发送电子邮件让其他人查看服务器。

0

或者,您也可以设置一个裸露的回购 (git init --bare) 和使用后收到钩检查出来,并将其复制到已发布的目录(hooks/post-receive

GIT_REPO=$HOME/blah 
TMP_GIT_CLONE=$HOME/tmp/tmpblah 
PUBLIC_WWW=/srv/public_folder/ 

git clone $GIT_REPO $TMP_GIT_CLONE 
mv $TMP_GIT_CLONE $PUBLIC_WWW 
exit 

我这是怎么管理的网站在我的服务器上,我推送到我的代码回购(gitosis设置)以及检出并将更改部署到生产的回购

一个简单的功能改进是将增加值添加到您的部署脚本中并部署到新的文件夹每次和s意味着更新一个符号链接指向它

这么一推今天会到2011102900旁边等和符号链接将连接目前取其文件夹是最新的(并且由post_receive脚本更新)