使用git commit hooks附加票号?

EnT*_*Cas 23 git githooks

所以我的分支机构以bugtracker票号命名,类似"issue-1234",我们有一个约定,总是在提交消息中写下票号.我想知道当我正在处理issue-*分支时,是否可以自动将票号附加在提交消息中,而我没有明确地输入它.

我查看了git commit hooks,即pre-commit,prepare-message和post-commit,但它们似乎都没能做我想做的事情.提交后挂钩很接近,但您无法修改使用-m提交的消息.

重申一下,我想知道这是否可行:

在分支上:issue-1234

git commit -a -m"fixed this pesky issue"
Run Code Online (Sandbox Code Playgroud)

提交后,在git log中,它将消息显示为:

fixed this pesky issue. ticket number: #1234
Run Code Online (Sandbox Code Playgroud)

Cas*_*bel 19

你错过了一个钩子.你想要的是commit-msg:

这个钩子由git commit调用,可以用--no-verify选项绕过.它需要一个参数,即包含建议的提交日志消息的文件的名称.退出非零状态会导致git commit中止.

例如:

#!/bin/sh

ticket=$(git symbolic-ref HEAD | awk -F- '/^issue-/ {print $2}')
if [ -n "$ticket" ]; then
    echo "ticket #$ticket" >> $1
fi
Run Code Online (Sandbox Code Playgroud)

这是一个非常天真的分支名称解析,它只是附加到自己的行上的提交消息.修改它,如果这对你不够好.

当然,我实际上建议这样做prepare-commit-msg,并且承诺git commit(没有-m).您可以在单行提交消息中实际编写足够的信息是非常非常罕见的.此外,这将允许您在提交之前查看消息,以防您的挂钩不能完成您想要的操作.


Wai*_*... 7

您也可以使用prepare-commit-msghook,它接受的参数多于commit-msg.然后,您可以检查消息是来自文件,模板等,以避免在您不需要时附加问题编号.

.git/hooks/prepare-commit-msg当您在名为的功能分支中工作时,使用以下脚本foo-123,然后[#123]将添加到您进行的每个提交的第三行.

我在写这篇文章的更多信息

#!/bin/sh

if [ x = x${2} ]; then
  BRANCH_NAME=$(git symbolic-ref --short HEAD)
  STORY_NUMBER=$(echo $BRANCH_NAME | sed -n 's/.*-\([0-9]\)/\1/p')
  if [ x != x${STORY_NUMBER} ]; then
    sed -i.back "1s/^/\n\n[#$STORY_NUMBER]/" "$1"
  fi
fi
Run Code Online (Sandbox Code Playgroud)