git 拉钩没有任何反应(post-更新)

Nothing happens on git pull hook (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

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

运行 git pull 不会调用 post-更新挂钩:git pullgit fetch 后跟 git rebasegit merge,或多或少,rebase 有效地以 git checkout 结束,而 merge 就是合并。 (对于所谓的 fast-forward 合并,git merge 在内部做了更像 git checkout 的事情,但也更新了当前分支名称。)因此,这两个钩子更适合这类工作。

Git 包括 a contrib/hooks/setgitperms.perl example script ,这意味着在 post-checkoutpost-merge 钩子中使用。

(还值得一提的是,在实时服务器上 运行 git pull 不一定是一个好的部署策略。 Git 本身不是部署系统,也不是 push-to -deploy 或 pull-to-deploy 本身就足以满足许多现实世界的设置。它们可以用于有限的子集,但一般来说,请考虑构建或使用真实的部署系统。)