代码之家  ›  专栏  ›  技术社区  ›  Robert Munteanu

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

git
  •  21
  • Robert Munteanu  · 技术社区  · 14 年前

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

    Bug : $BUG
    

    如何使用git注释模板执行这种替换?

    3 回复  |  直到 14 年前
        1
  •  19
  •   Cascabel    13 年前

    我可能会用 prepare-commit-msg 钩子将其添加到文件中。从(链接的)手册页:

    git commit在准备默认日志消息之后、编辑器启动之前调用此钩子。

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

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

    钩子的目的是就地编辑消息文件。。。

    你可以用 git symbolic-ref HEAD .

    git symbolic-ref HEAD >> "$1" . 如果你想嵌入你最喜欢的方法-最可读的是把原始的移到一边,写,附加,但是链接在注释中的方法当然也能工作。

    sed -i "s/Bug : \$BUG/BUG : $(git symbolic-ref HEAD)/" "$1" . 我相信你可以想象很多其他的变化。

    对于某些类型的提交(第二个参数),您可能希望禁止此行为,或者,如果第二个参数是“template”,则仅在使用样板替换方法时才启用此行为。

        2
  •  2
  •   sschmeck    13 年前

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

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

    只是把杰弗罗米的回答拼凑起来,我最终得到了这样的结果。如果我知道我在做什么的话,肯定会更紧:

    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