每次运行git pull
时,我都需要对项目执行一些操作(准备gettext *.mo消息文件)。有没有合适的git钩子,我可以用来做这个用途?
发布于 2018-02-09 23:59:39
post-merge
-有关如何使用的更多详细信息,请参阅https://git-scm.com/docs/githooks#_post_merge。
发布于 2022-02-15 08:16:19
这种方法对我很有效。
首先,向/path/to/your_project/.git/hooks/
添加一个名为post-merge
的文件
cd /path/to/your_project/.git/hooks/
touch post-merge
然后,将它的所有权更改为与文件夹相同(这与nginx
和php-fpm
runner相同),在我的示例中,我使用www:www
sudo chown www:www post-merge
然后将它的文件模式改为775(然后它就可以执行了)
sudo chmod 775 post-merge
然后将下面的代码片段放到post-merge
中。要理解该代码片段,请参阅here(实际上这就是我)。
#!/bin/sh
# default owner user
OWNER="www:www"
# changed file permission
PERMISSION="664"
# web repository directory
REPO_DIR="/www/wwwroot/your_project/"
# remote repository
REMOTE_REPO="origin"
# public branch of the remote repository
REMOTE_REPO_BRANCH="master"
cd $REPO_DIR || exit
unset GIT_DIR
files="$(git diff-tree -r --name-only --no-commit-id HEAD@{1} HEAD)"
for file in $files
do
sudo chown $OWNER $file
sudo chmod $PERMISSION $file
done
exec git-update-server-info
一切都完成了,现在,回到your_project文件夹
cd /path/to/your_project/
运行your_project文件夹下的git pull
,记住您必须以超级用户或sudo身份运行(我记得sudo)
sudo git pull
现在检查从远程存储库中拉出的新文件,查看其所有权是否已更改为www:www
(如果如预期,则新拉出的文件的所有权应更改为www:www
)。
这种方法比sudo chown -R www:www /www/wwwroot/your_project/
好得多,因为它只改变了新文件的所有权,而不是所有文件的所有权!假设我刚拉了两个新文件,如果你改变整个文件夹的所有权,它会花费更多的时间和服务器资源(cpu使用率,内存使用率...),这是完全不必要的。
https://stackoverflow.com/questions/4185400
复制相似问题