我如何对git hooks中的新标签做出反应?

时间:2011-04-27 20:08:22

标签: git githooks

我想设置一个git hook,它根据传入的标签创建一个CDN样式的目录结构。因此,例如,如果本地存储库中的最后一个标记是“v1.2.1”并且我使用“v1.2.2”提交了一个提交,它应该看到新标记并将存储库直接克隆到一个新的(.../1.2 .2)相应的。

我很确定我想将此附加到post-receive,但是我在文档中找不到有关如何读取传入标记的git hooks的内容。它们是在不同的钩子上交付的吗?我是否真的需要让shell脚本运行git命令来查看是否有任何新提交有新标签?

谢谢!

1 个答案:

答案 0 :(得分:32)

标签与任何其他标签一样(如提交) 如果标签被推送到具有post-receive hook的仓库,那么将调用该钩子并列出所有更新的ref,除了它们的名称(在其标准输入上)之外,它们都是所有refs的旧值和新值。

例如,请参阅此服务器post-receive email挂钩。

#!/bin/sh

. $(dirname $0)/functions

process_ref() {
    oldrev=$(git rev-parse $1)
    newrev=$(git rev-parse $2)
    refname="$3"

    set_change_type
    set_rev_types
    set_describe_tags

    case "$refname","$rev_type" in
      refs/tags/*,tag)
        # annotated tag
        refname_type="annotated tag"
        function="atag"
        short_refname=${refname##refs/tags/}
        # change recipients
        if [ -n "$announcerecipients" ]; then
          recipients="$announcerecipients"
        fi
      ;;
    esac 
}

while read REF; do process_ref $REF; done

为此,您还必须从前面提到的示例挂钩存储库安装the functions file