在提交模板中包含当前分支名称

时间:2010-11-03 12:11:25

标签: git

我为git设置了一个提交模板,我想在其中包含当前分支的名称。我通常将分支设置为bug id,这将有助于我填写样板文件,例如:

Bug : $BUG

如何使用git评论模板执行此类替换?

3 个答案:

答案 0 :(得分:19)

我可能只是使用prepare-commit-msg挂钩将其添加到文件中。来自(链接)手册页:

  

在准备默认日志消息之后,以及在编辑器启动之前,git commit会调用此挂接。

     

需要一到三个参数。第一个是包含提交日志消息的文件的名称。第二个是提交消息的来源...... [消息,模板,合并,压缩或提交] ......

     

如果退出状态为非零,则git commit将中止。

     

钩子的目的是编辑消息文件......

您可以使用git symbolic-ref HEAD获取当前分支。

您可以完全绕过模板,并使钩子前置/插入/追加分支名称。最简单的情况,附加,脚本只是一个shebang行,然后是git symbolic-ref HEAD >> "$1"。如果你想嵌入它,可以使用你最喜欢的方法 - 最可读的方法是将原文放在一边,写入和追加,但注释中链接的方法肯定也有用。

如果您更喜欢使用带占位符的模板,则可以执行sed -i "s/Bug : \$BUG/BUG : $(git symbolic-ref HEAD)/" "$1"之类的操作。我相信你可以想象很多其他的变化。

如果您正在使用样板替换方法,您可能希望针对某些类型的提交(第二个参数)抑制此行为,甚至仅在第二个参数为“template”时将其打开。

答案 1 :(得分:2)

使用git别名但没有模板的解决方案:

$ git config --global alias.com '!sh -c "bug=`git symbolic-ref HEAD|sed s#refs/heads/##`; git commit -em \"BUG: \${bug}\""'
$ git com

答案 2 :(得分:0)

只是将Jefromi答案的评论拼凑起来,我最终得到了类似的东西。当然它可能会更严格(如果我知道我在做什么):

tempFile='/tmp/git-commit-template'
git config commit.template "$tempFile"
rm $tempFile
branch=$(git symbolic-ref HEAD|sed s#refs/heads/##) exec 3<> "$tempFile" && awk -v TEXT="[$branch]" 'BEGIN {print TEXT}{print}' "$tempFile" >&3
git add .
git commit -a