首页 > 解决方案 > GIT: post-receive -> 获取推送的分支名

问题描述

我想获取正在推送到我的遥控器的分支的名称。例如:当我将本地分支推feature/awesome送到f5/masterf5是我的测试服务器)时,我想feature/awesome在我的 post-receive 挂钩中获取字符串。

我已经在 SO 的帮助下完成了获取收到推送的分支的名称:

while read oldrev newrev refname
do
    branch=$(git rev-parse --symbolic --abbrev-ref $refname)
    echo "$oldrev" > last.txt # a hash
    echo "$newrev" >> last.txt # a hash
    echo "$refname" >> last.txt # refs/heads/master
    echo "$branch" >> last.txt # master
done

我的目标是将信息发送到正在将其写入数据库的服务,然后创建有关当前将哪些功能推送到哪个测试服务器的概述。

但我正在努力获取推送的功能名称。有谁知道这是否可能以及我如何实现这一目标?

另一种解决方案是将本地分支直接推送到测试服务器,而不是将其推送到主分支。我想避免这种情况在我的服务器上只有一个分支。

标签: gitgit-post-receive

解决方案


在推送中并不总是需要本地参考。如果feature/awesome点在 commit abc123git push origin feature/awesome:mastergit push origin abc123:master是相同的。

如果您对本地分支有严格的命名规则和推送的常规工作流程,您可以尝试-o/--push-option , git push origin --push-option=feature/awesome feature/awesome:master. 在post-receivefeature/awesome中,您可以从 env 变量中获取字符串GIT_PUSH_OPTION_0。您需要检查您的 Git 版本是否支持此功能。


推荐阅读