0

当我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它时,它什么也不做。

4

1 回答 1

1

运行git pull不会调用更新后挂钩:git pull后跟git fetchorgit rebase或多或少git merge,并且 rebase 有效地以git checkoutwhile 结束。(对于所谓的快进合并,git merge更像是在git checkout内部做一些事情,但也会更新当前分支名称。)因此,这两个钩子更适合这种工作。

Git 包含一个contrib/hooks/setgitperms.perl示例脚本,旨在用于post-checkoutpost-merge挂钩。

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

于 2018-12-14T16:01:40.737 回答