从git hook调用脚本

时间:2015-11-04 16:25:07

标签: git githooks

假设我在server / hooks文件夹中有两个脚本:

首先启动记录并写入有关推送的基本信息:(接收后)

#!/bin/sh
read oldrev newrev refname
LOGFILE=post-receive.log
echo " push - Old SHA: $oldrev -> $newrev >> $LOGFILE
sh ./post-receive-logic >> $LOGFILE

第二个实际部署:(接收后逻辑)

#!/bin/sh
cd ~/proj
pm2 stop ~/proj/main.js
git --git-dir ~/proj/.git --work-tree ~/proj pull
npm install
pm2 restart ~/proj/main.js
echo "finished"

当我推送提交时,第二个脚本永远不会被调用:工作树中没有更改,没有服务器被杀死和重新启动,没有特定于第二个脚本的输出。

如果我手动拨打./post-receive-logic,一切顺利,服务器停止,文件被拉,服务器再次启动。

我尝试在没有sh的情况下调用它,如下所示:

./post-receive-logic >> $LOGFILE

但没有运气。

我做错了什么?

1 个答案:

答案 0 :(得分:2)

练习:在接收后挂钩操作期间zs<-z[seq(1,length(z),len=4)] (或.)在哪里?

运行它时,它你的 $PWD是什么。什么时候它会自动运行? (看看接收系统的裸git存储库:您的$PWD输出将在该目录中。)

(在你的帖子中,钩子文本中有一个缺少的近距离引用,所以大概是你手工复制了脚本的某些部分,也许还有其他缺失的东西。另外,请确保hook具有执行权限。但是我的猜测是,你被git运行挂钩$LOGFILE设置为$PWD目录,而不是挂钩目录。“

(旁注:你的钩子可能不完整,因为它只能读取一个.git,但是oldrev newrev refname可以推送许多引用。通常你应该循环:git push。如果你有一个预接收挂钩拒绝推送推送多个ref,但这个特殊的post-receive挂钩可能是正确的。)