git-commit-template中是否支持使用变量?如何实现变量自动替换功能?
实现Git Commit模板变量自动替换的方案
以下是无需额外第三方工具、基于Git原生能力的实现方案:
操作步骤
- 第一步:进入项目的Git钩子目录
执行命令:cd .git/hooks - 第二步:新建/编辑
prepare-commit-msg钩子文件,写入如下脚本内容:
#!/bin/sh # 提取当前分支名 BRANCH_NAME=$(git symbolic-ref --short HEAD) # 匹配分支名中的工单编号,默认适配 feature/、fix/、bugfix/ 等前缀+工单编号的命名规则 TICKET=$(echo "$BRANCH_NAME" | grep -Eo '([A-Z]+-[0-9]+)' | head -n 1) # 匹配到工单编号时执行变量替换 if [ -n "$TICKET" ]; then # 替换commit模板中的$TICKET变量 sed -i.bak "s/\$TICKET/$TICKET/g" "$1" # 清理sed生成的临时备份文件 rm -f "$1.bak" fi
- 第三步:给钩子文件授予可执行权限
执行命令:chmod +x prepare-commit-msg - 第四步:配置commit模板(未配置过模板的情况下操作)
把你的模板内容存为项目根目录下的.git-commit-template文件,内容示例:
执行命令指定Git使用该模板:Fix issue lalala [Ticket] http://url-from-ticket/$TICKETgit config commit.template .git-commit-template
效果说明
后续你每次执行git commit唤起提交编辑页时,钩子会自动把模板里的$TICKET替换为当前分支的工单编号,比如分支为fix/DEV-001时就会自动替换为DEV-001。
如果你的分支命名规则不同,只需要调整脚本中grep后的正则表达式,即可适配你的工单编号匹配规则
全局生效配置
如果需要所有本地Git项目都生效,可以将该钩子放到Git全局模板目录:
- 执行命令设置全局模板目录:
git config --global init.templatedir '~/.git-templates' - 把编写好的
prepare-commit-msg文件放到~/.git-templates/hooks/目录下即可,后续新clone/init的项目会自动加载该钩子,现有项目需要手动复制钩子到对应.git/hooks目录。
内容的提问来源于stack exchange,提问作者Caio Borghi
相关产品推荐
相关产品推荐

