0

我整天都在寻找一种方法来在服务器端进行更改(例如,当 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 hookpost-receive hook

4

1 回答 1

0

您正在尝试做的事情有点棘手,因为如果那里有任何您在本地没有的提交(无论是否冲突),您都无法推送到远程分支。如果您对此感到满意,那么您就在正确的轨道上。我假设您将上面的脚本设置为您的接收后挂钩?您只需将其设置为预接收挂钩并在有修改时返回非零值。您可能还想向用户回显一条错误消息,告诉他发生了什么。

如果发生这种情况,推送将失败,用户必须先拉动,然后才能推送(因为推送不再是快进)。

但是,为什么要在检查更改之前进行结帐?

于 2012-12-19T22:34:45.480 回答