创建Git接收钩子以发布标签名称

时间:2020-06-06 19:26:26

标签: git hook git-post-receive

我对Git临时配置有疑问。

我需要在标签发布或任何提交中传递标签名称,例如

#!/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的值)-脚本中出了什么问题?

1 个答案:

答案 0 :(得分:1)

您正在单引号数据,存在单引号以关闭Shell的字符串构造语法,扩展和单词拆分以及其他功能。由于refname中不能包含空格或glob语法,因此我认为您无需引用扩展名就可以解决问题,但是为了安全起见,为了控制扩展,我通常会根据需要从单引号切换到双引号

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

或者您可以只对所有双引号进行处理并转义json的多余引号,从而以这种方式来解决它们:

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

编辑:嗯,来自git help check-ref-format,我得到了

这些规则使基于Shell脚本的工具可以轻松解析引用名称,并通过 引用名称不加引号(错误)时使用shell,并且还避免某些引用中的歧义 名称表达式(请参见gitrevisions(7)):

即您保证根本不必引用refname扩展名。