在 post-update 钩子中查找 Git 分支名称

38

我正在执行一个程序,每当远程仓库发送更新时,它就会向CruiseControl发出警报。我使用Git的post-update钩子来实现这一点。

如果我能找出已提交的分支名称,那么我就可以使用它来通知CruiseControl要构建哪个分支,这将非常有用。在post-update钩子中有没有办法访问分支名称?

1个回答

51

post-update钩子的第一个参数是完整的分支引用 - 比如当推送到'origin master'时,我看到'refs/heads/master'。因此,一个仅打印修改的分支的示例钩子脚本如下:

#!/bin/sh
branch=$(git rev-parse --symbolic --abbrev-ref $1)
echo Update pushed to branch $branch
exec git update-server-info
为了说明,当上述内容放入您的远程存储库的hooks/post-update文件中时,执行推送操作时会打印以下内容:
% git push origin master
Counting objects: 5, done
Writing objects: 100% (3/3), 247 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
remote: Update pushed to branch master
To /tmp/xx/a
    e02d9cd..ab14a08  master -> master

我们的钩子脚本输出了以'remote:'开头的新行。


3
针对$1未被填充的环境,请参考pauljz在此处给出的答案:https://dev59.com/eWs05IYBdhLWcg3wQvoe - dazweeja
1
请注意,该链接是一个 post-receive 钩子,而这个答案是针对 post-update 钩子的。它们处理输入的方式不同。Post-update 钩子获取命令行参数,而 post-receive 钩子通过 stdin 提供参数。 - patthoyts
谢谢!有一件事我不太明白:为什么你要在post-update钩子的最后一个语句中运行exec git update-server-info?这是因为该仓库可通过HTTP访问吗? - leifericf
1
@Leif:是的。因为该命令已经在钩子脚本中了。update-server-info 只是为了 HTTP 访问和 GitWeb。 - patthoyts
既然我是在谷歌上找 Git 文档时发现的这篇文章,那么我就留下一个链接给大家,这里有详细说明所有钩子如何被调用:https://git-scm.com/docs/githooks - mrfred
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接