当我在实时服务器上执行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
时,它什么也没做。
答案 0 :(得分:1)
运行git pull
不会调用更新后挂钩:git pull
是git fetch
,后跟git rebase
或git merge
,或多或少,然后重新设置基准有效地以git checkout
结尾,而合并就是合并。 (对于所谓的 fast-forward 合并,git merge
在内部执行的操作与git checkout
类似,但也会更新当前的分支名称。)因此,这两个钩子非常有用更适合此类工作的候选人。
Git包含a contrib/hooks/setgitperms.perl
example script,该{#3}}用于post-checkout
和post-merge
钩子中。
(还值得一提的是,在实时服务器上运行git pull
不一定是一个好的部署策略。Git本身不是一个部署系统,即按即用和按需部署都不足够可以单独用于许多实际的设置。它们可以用于有限的子集,但通常,请考虑构建或使用实际的部署系统。