git pull hook(更新后)没有任何反应

时间:2018-12-14 10:05:37

标签: git githooks post-update

当我在实时服务器上执行git pull时,我以root用户身份登录,因此所有修改过的文件或新文件的用户和组都设置为root:root

我已经在我的post-update挂钩文件中尝试过此设置:

OWNER="example:example"
REPO_PATH="/home/example/public_html"

cd $REPO_PATH || exit
unset GIT_DIR
FILES="$(git diff-tree -r --name-only --no-commit-id)"
git merge FETCH_HEAD

for file in $FILES
    do 
    chown $OWNER $file
done

exec git update-server-info

当我运行git pull时,它什么也没做。

1 个答案:

答案 0 :(得分:1)

运行git pull不会调用更新后挂钩:git pullgit fetch,后跟git rebasegit merge,或多或少,然后重新设置基准有效地以git checkout结尾,而合并就是合并。 (对于所谓的 fast-forward 合并,git merge在内部执行的操作与git checkout类似,但也会更新当前的分支名称。)因此,这两个钩子非常有用更适合此类工作的候选人。

Git包含a contrib/hooks/setgitperms.perl example script,该{#3}}用于post-checkoutpost-merge钩子中。

(还值得一提的是,在实时服务器上运行git pull不一定是一个好的部署策略。Git本身不是一个部署系统,即按即用和按需部署都不足够可以单独用于许多实际的设置。它们可以用于有限的子集,但通常,请考虑构建或使用实际的部署系统。