创建 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 扩展。
我对临时 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 扩展。