我有一个关于跨多个实时http服务器的git存储库复制的问题
我的目标是从我的测试服务器创建到实时http服务器的复制。因此,当我在测试时提交更改时,更改应自动出现在服务器上 我看了一下gerrit2,它看起来没问题,但我试着用git做,但是因为git使用post-commit hook我确信我能用它做到这一点
所以我尝试在提交后在钩子中进行多次推送(因为覆盖似乎只是选项,因为如果我合并那么就有可能发生冲突,而我想要在我的实时服务器上存在的最后一件事是混乱的文件.. 。)从测试到实时,首先我得到了一些奇怪的错误,但后来我添加了force参数并推送成功,但不幸的是,更改没有出现在远程服务器上。 我使用ssh协议来交换数据。
如何做到如此好,可靠?我必须执行的命令集是什么?
答案 0 :(得分:1)
正如@Jefromi所指出的,推动它不是一个好主意。
相反,您可以尝试通过使用定期运行的脚本(例如每小时或5分钟的每个倍数)从生产服务器提取。通过这种方式,您将了解服务器何时更新。
但是,如果您在服务器上进行任何修改,则拉取可能会失败,因为它将拒绝更新已修改的文件。您可以使脚本在执行拉取之前检查工作副本是否脏,并发送电子邮件以让某人查看服务器。
答案 1 :(得分:0)
或者你可以设置一个裸仓库
(git init --bare
)
并使用post receive hook将其签出并复制到已发布的目录(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设置)和检查并将更改部署到生产的仓库
一个简单的功能改进是将增量值添加到部署脚本中并每次部署到新文件夹中,只需更新符号链接以指向它
所以今天推送到2011102900下一个等等,一个符号链接将当前链接到最新的文件夹(并由post_receive脚本更新)