无法从Git post-receive hook中检测到分支

jsl*_*euw 15 git hook git-post-receive

我在远程仓库上有一个post post hook挂钩设置,试图确定传入推送的分支名称,如下所示:

$branch = `git rev-parse --abbrev-ref HEAD`
Run Code Online (Sandbox Code Playgroud)

但是,我发现,无论我从我的$ branch变量推送什么分支都设置为'master'.

有任何想法吗?

ral*_*nja 24

post-receive挂钩获取与pre-receive相同的数据,而不是参数,而是来自stdin.所有参考均发送以下内容:

oldRev(space)newRev(space)refName(换行)

您可以使用此bash脚本解析引用名称:

while read oldrev newrev ref
do
    echo "$ref"
done
Run Code Online (Sandbox Code Playgroud)

  • 除非要注意`post-receive`是否正在接收`git push --tags`(可能是`git push origin my_tagname`),那么你将得到的`ref`是`refs/tags/my_tagname`和*不是*`refs/branch/my_branchname` (2认同)

小智 10

你也可以使用bash变量替换来做这样的事情:

read oldrev newrev ref

branchname=${ref#refs/heads/}

git checkout ${branchname}
Run Code Online (Sandbox Code Playgroud)