在 post 中触发一些东西-仅在添加新标签时接收

Trigger something in post-receive only when new tag is added

我想在 仅推送新标签时 在 GIT 的 post-receive 挂钩中执行一些操作 到存储库。如何实现?

谢谢


解决方案(Jan Krüger 的回答)

新标签有 $oldrev 个零。删除的标签有 $newrev 个等于零。对于两个 $ref 值都以 refs/tags/.

开头
#!/bin/sh
#

read oldrev newrev ref

if [[ "0000000000000000000000000000000000000000" == $oldrev ]] && [[ $ref == refs\/tags\/* ]];
then
    echo "New tag added"
fi

post-receive 挂钩在 stdin 上接收有关在该操作中更新的所有 refs(分支、标签...)的信息。每行具有以下格式,取自 githooks manpage:

<old-value> SP <new-value> SP <ref-name> LF

所以这将是创建新标签的示例:

0000000000000000000000000000000000000000 0123456789abcdef0123456789abcdef01234567 refs/tags/mytag

您只需要从标准输入中读取并检查一行是否与此格式匹配。基本上第一个 "word" 是全零,第三个单词以 refs/tags/.

开头