【发布时间】:2015-12-14 02:52:37
【问题描述】:
我在遥控器上有一个 git,并添加了一个接收后挂钩。 post-receive 挂钩应执行以下操作。
如果[composer] 出现在提交消息中,请进行作曲家更新
如果[deploy] 出现在提交消息中,则检查已推送的分支(例如feature/test、master 等)
如果[migrate] 出现在提交消息中,请执行php artisan migrate
不幸的是,这不起作用。钩子被调用,但动作是“错误的”。
这是脚本
#!/bin/sh
MESSAGE=$(git log -1 HEAD --pretty=format:%s)
if [[ "$MESSAGE" == *\[composer\]* ]]; then
composer --working-dir=/var/www/feedev/ update
fi
if [[ "$MESSAGE" == *\[deploy\]* ]]; then
while read oldrev newrev ref
do
branch=`echo $ref | cut -d/ -f3`
git --work-tree=/var/www/feeddev/ --git-dir=/home/feeddev/staging.git checkout -f $branch
done
else
git --work-tree=/var/www/feedev/ --git-dir=/home/feeddev/staging.git checkout -f
fi
if [[ "$MESSAGE" == *\[migrate\]* ]]; then
php /var/www/feedev/artisan migrate
fi
这不起作用,因为出于测试目的,我添加了这些行
touch /home/ezidev/ezidev.git/$MESSAGE.lock
在读取消息变量后,如果第二种情况为假,则添加此
touch /home/ezidev/ezidev.git/nodeploy.lock
所以现在我正在提交,并且有提交消息 [deploy],但是没有签出新分支,并且还生成了两个新文件
touch /home/ezidev/ezidev.git/$MESSAGE.lock 生成/home/ezidev/ezidev.git/static.lock
和
touch /home/ezidev/ezidev.git/nodeploy.lock 生成/home/ezidev/ezidev.git/nodeploy.lock
为什么 $MESSAGE = static.lock?我没有把它写到我的提交消息中。可能是什么问题,我该如何解决?
【问题讨论】:
-
你的 git 远程用户有正确的权限吗?
-
我需要什么?我想我得到了正确的,因为它正在创建文件,或者你的意思是什么。还有吗?
-
您是否也需要
git log调用中的--work-tree和/或--git-dir参数? -
我查看了文档:git-scm.com/docs/git-log,但不幸的是,没有工作树和/或 git-dir 的日志参数
-
@Musterknabe:
git log不检查工作树,因此它不需要--work-tree。它确实检查了 git 目录,并且确实采用了--git-dir(--git-dir和--work-tree标志由git前端命令处理,而不是后端log或checkout,所以所有命令接受它们)但你不需要在这里设置任何东西。
标签: git bash version-control hook