git:post-receive hook中的空参数

tak*_*hin 14 git bash githooks

我正在编写基于dir post-receive-email脚本的post-receive hook contrib,但似乎oldrevnewrev参数都是空的.

该脚本如下所示:

#!/bin/bash

oldrev=$(git rev-parse $1)
newrev=$(git rev-parse $2)
Run Code Online (Sandbox Code Playgroud)

该脚本在运行推,但所有$1,$2,$oldrev$newrev是空的.我应该配置一些东西让它运行吗?

(gitolite如果它确实重要,则创建存储库)

小智 51

我在设置持续集成服务器时偶然发现了这个问题.由于参数未通过命令行传递给post-receive,因此必须使用read命令.我是这样做的:

#!/bin/sh
read oldrev newrev refname
BRANCH=${refname#refs/heads/} 
curl --request POST "http://my.ci.server/hooks/build/myproject_$BRANCH"
Run Code Online (Sandbox Code Playgroud)


est*_*ani 11

虽然信息是通过STDIN传递的,但没有任何参数.要从bash中读取该信息,只需执行以下操作:

read oldrev newrev refname
echo "Old revision: $oldrev"
echo "New revision: $newrev"
echo "Reference name: $refname"
Run Code Online (Sandbox Code Playgroud)

我只是总结已发布的答案.


Jör*_*tag 9

post-receive钩不带任何参数.答曰手动(强调):

此挂钩由远程存储库上的git-receive-pack调用,这在本地存储库上执行git push时会发生.在更新所有引用后,它将在远程存储库上执行一次.

该钩子为接收操作执行一次.它不需要参数,但获取pre-receive与其标准输入上的钩子相同的信息.

这个钩子不会影响结果git-receive-pack,因为它是在完成实际工作后调用的.

这取代了post-update钩子,除了它们的名称之外,它还获得了所有引用的旧值和新值.

标准输出和标准错误输出都转发到git send-pack另一端,因此您只需回显用户的消息.

默认post-receive挂钩是空的,但是git发行版post-receive-email中的contrib/hooks目录中提供了一个示例脚本,它实现了发送提交电子邮件.