如何从预接收挂钩中获取我的分支名称?

How to get my branch name from a pre-receive hook?

我正在 GitHub 企业工作,但我没有权限将新的预接收挂钩上传到我们的存储库。

我尝试将我的钩子作为预推钩子进行测试,它的效果非常好, 但是当我把我的钩子发给我们的管理员时,他说:"The GitHub pre-receive-hook script is different with git pre-receive-hook script. The git symbolic-ref --short HEAD may not work as your expected"

所以我需要找到一种方法来替换这个命令:

current_branch=$(git symbolic-ref --short HEAD) || exit 1

将我的当前分支保存在 "current_branch" 参数中的命令?

没有测试能力我该如何做?

预接收挂钩是不同Git中的挂钩运行。 your Git 中的当前分支是无关紧要的,并且在预接收挂钩中,their Git 的当前分支分支也无关紧要。无论您的实际任务是什么,使用 "the current branch" 都是错误的。

(他们 Git 的当前分支 可能 与 post-receive 挂钩相关,如果该挂钩的工作是将更新部署到当前分支。但是,请注意,接收 Git 通常配置为 "bare" 个存储库。)

实际上,当使用标准输入时,您可以从第一个参数“$refname”得到 CURRENT_BRANCH :

while read oldrev newrev refname; do
    echo "$refname : $oldrev ~ $newrev"
done

如果您想使用 sed 对其进行切碎和清理,您只需添加以下内容:

while read oldrev newrev refname; do
    echo "$refname : $oldrev ~ $newrev"
    current_branch=$refname
    short_current_branch="$(echo $current_branch | sed 's/refs\/heads\///g')"
done

你将在参数中得到分支的名称 (short_current_branch)