创建 Git post-接收挂钩到 post 标签名称

Creating Git post-receive hook to post Tag name

我对临时 Git 配置有疑问。

我需要在标签 post 或任何提交上传递标签名称,例如

#!/bin/bash
while read oldrev newrev refname
do
    branch=$(git rev-parse --symbolic --abbrev-ref $refname)
    curl -X POST "https://en4c6i2k7daz5.x.pipedream.net/" \
        -H 'Content-Type: application/json' \
        -d '{"version": "$refname"}'            
done

我得到的结果(参见 https://requestbin.com/r/en4c6i2k7daz5/1cxY1mJeMlejAnF0OJ8B8iCd6sl

{"version": "$refname"}

所以出于某种原因它没有发送标签名称($refname 的值)- 脚本中有什么问题?

你在单引号你的数据,单引号的存在是为了关闭 shell 的字符串构造语法、扩展和分词等等。由于 refnames 中不能有白色 space 或 glob 语法,我认为你可以在不引用它们的扩展的情况下获得,但为了安全我通常会这样做,为了控制扩展我通常会从单引号切换到双引号根据需要得到:

-d '{"version": "'"$refname"'"}'

或者你可以只用双引号和转义 json 多余的双引号,以这种方式硬塞它们:

-d "{\"version\": \"$refname\"}"

编辑:嗯,来自 git help check-ref-format 我正在

These rules make it easy for shell script based tools to parse reference names, pathname expansion by the shell when a reference name is used unquoted (by mistake), and also avoid ambiguities in certain reference name expressions (see gitrevisions(7)):

即你保证根本不需要引用 refname 扩展。