【问题标题】:Find Git branch name in post-update hook [duplicate]在更新后挂钩中查找 Git 分支名称 [重复]
【发布时间】:2011-11-11 23:45:55
【问题描述】:

每次将更新发送到我们的远程存储库时,我正在执行一个程序来提醒 CruiseControl。为此,我正在使用 Git 更新后挂钩。

如果我能找出哪个分支已经提交,那就太好了,这样我就可以用它来通知 CruiseControl 要构建哪个分支。有没有办法在更新后挂钩中访问分支名称?

【问题讨论】:

    标签: git shell cruisecontrol githooks


    【解决方案1】:

    更新后挂钩的第一个参数是完整的分支引用 - 例如,我看到 'refs/heads/master' 用于推送到 'origin master'。因此,仅打印修改的分支的示例挂钩脚本是:

    #!/bin/sh
    branch=$(git rev-parse --symbolic --abbrev-ref $1)
    echo Update pushed to branch $branch
    exec git update-server-info
    

    为了说明,当将上述内容放入远程存储库挂钩/更新后文件时,执行推送时会打印以下内容:

    % 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:' 开头的新行是我们的钩子脚本输出的。

    【讨论】:

    • 谢谢,帕特霍伊茨。使用上面的代码,我得到“远程:钩子/更新后:第 8 行:分支:找不到命令”。锚
    • 我提供了一个扩展示例。您仍然需要在开始时使用 #!/bin/sh 行。此外,当您在 shell 脚本中设置变量时,请使用 $ 来访问该值
    • 对于那些没有填充 $1 的环境,请在此处查看 pauljz 的答案:stackoverflow.com/questions/7351551/…
    • 请注意,该链接指向一个 post-receive 钩子,而这个答案是一个 post-update 钩子。他们以不同的方式处理输入。更新后挂钩获取命令行参数,而接收后挂钩在标准输入上提供参数。
    • @Leif:是的。而且因为该命令已经在钩子脚本中。 update-server-info 仅用于 HTTP 访问,我认为也用于 gitweb。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-24
    • 2020-12-10
    • 1970-01-01
    • 2013-09-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多