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 pull
是 git fetch
后跟 git rebase
或 git merge
,或多或少,rebase 有效地以 git checkout
结束,而 merge 就是合并。 (对于所谓的 fast-forward 合并,git merge
在内部做了更像 git checkout
的事情,但也更新了当前分支名称。)因此,这两个钩子更适合这类工作。
Git 包括 a contrib/hooks/setgitperms.perl
example script ,这意味着在 post-checkout
和 post-merge
钩子中使用。
(还值得一提的是,在实时服务器上 运行 git pull
不一定是一个好的部署策略。 Git 本身不是部署系统,也不是 push-to -deploy 或 pull-to-deploy 本身就足以满足许多现实世界的设置。它们可以用于有限的子集,但一般来说,请考虑构建或使用真实的部署系统。)
当我在实时服务器上执行 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 pull
是 git fetch
后跟 git rebase
或 git merge
,或多或少,rebase 有效地以 git checkout
结束,而 merge 就是合并。 (对于所谓的 fast-forward 合并,git merge
在内部做了更像 git checkout
的事情,但也更新了当前分支名称。)因此,这两个钩子更适合这类工作。
Git 包括 a contrib/hooks/setgitperms.perl
example script ,这意味着在 post-checkout
和 post-merge
钩子中使用。
(还值得一提的是,在实时服务器上 运行 git pull
不一定是一个好的部署策略。 Git 本身不是部署系统,也不是 push-to -deploy 或 pull-to-deploy 本身就足以满足许多现实世界的设置。它们可以用于有限的子集,但一般来说,请考虑构建或使用真实的部署系统。)