我一直在寻找一种方法来获取服务器端的更改(比如当WordPress安装新的插件更新或有人上传某些内容时),以便提交到我用于站点部署的Git存储库。这是我最接近的:
#!/bin/sh
git --git-dir=/home/cameronm/git/cameronmalek.git --work-tree=/home/cameronm/public_html/ checkout -f master
git --work-tree=/home/cameronm/public_html/ diff --exit-code &>-
if [ "$?" -ne 0 ]; then
git --work-tree="/home/cameronm/public_html/" add .;
git --work-tree="/home/cameronm/public_html/" commit -m "automated server-side update";
fi
这个解决方案的问题,以及这篇文章的原因是,这一切都以错误的顺序发生。我正在寻找一种方法,在我的更新推迟之前,将其他非Git方所做的所有更改提交到实时网站目录。这样做的原因是如果我尝试推送的更新会覆盖最近添加到服务器的内容,我希望能够看到合并冲突。
我整夜都试图想出这个。这是一个很难描述的问题(和谷歌一样),所以如果我能为你澄清任何事情,请给我一张便条。
感谢您提供的任何帮助!
您可以在我的Gists页面上查看我的工作解决方案(单独的预接收和后接收挂钩)。这是pre-receive hook和post-receive hook。
答案 0 :(得分:0)
你要做的事情有点棘手,因为如果那里有你没有本地的任何提交,你就无法推送到远程分支 - 冲突与否。如果你对此感觉不错,那么你就是在正确的轨道上。我假设您将上面的脚本设置为后接收挂钩?您只需将其设置为pre-recieve hook,如果有修改则返回非零值。您可能还希望向用户回显错误消息,告诉他发生了什么。
如果发生这种情况,推送将失败并且用户必须在他可以推动之前拉动(因为推送不再是快进)。
但是为什么你在检查更改之前结帐?