确保github PR squash合并提交注释包含问题ID

时间:2019-03-05 15:37:54

标签: git github jira pull-request

如何确保来自github PR南瓜合并的提交评论包含必需的文本?

我们使用Jira + Github,如果用户在提交注释中输入了Jira问题ID,则这些提交将链接到Jira问题。

当用户从其私有功能分支合并PR时,通常会挤压并合并,这意味着用户可以手动汇总从该分支到较大的集成分支或主节点的单次提交的意图。

如果用户在合并PR时忘记输入它们,那么编辑提交并将文本添加到消息中将变得很痛苦。

我是否可以在PR上使用状态检查或提交消息格式化程序,以确保必须有看起来像Jira ID的内容? (AAA-111)

2 个答案:

答案 0 :(得分:3)

与此相关的另一种方法*是确保提交消息中包含分支名称,在JIRA中,该分支名称很可能源自问题标题。

为此,同事必须在其.git/hooks目录中包含一个名为commit-msg的文件,其内容如下:

#!/bin/bash
current_branch="$(git rev-parse --abbrev-ref HEAD)"
tmp=$(mktemp) || exit
echo "$current_branch $(cat "$1")" > "$tmp"
mv "$tmp" "$1"

然后,当某人在功能分支ABC-1234-customers-cant-log-in上提交时,将执行如下所示的提交命令:

git commit -m "Awesome changes"

...实际上将产生以下提交消息:

ABC-1234-customers-cant-log-in Awesome changes

...然后JIRA会将提交链接到问题。

我们已经在团队中实施了这项政策,它具有以下优势:

  • 不再忘记提交消息中的JIRA问题编号
  • 获得时间
  • 在需要时解析提交消息稍微容易一点

(作为附带说明,也可以根据需要使用git commit -n将这种自动行为停用)

* (请注意,这两种解决方案不是互斥的。实际上,您很可能都希望Adil's既可以实现远程仓库完整性,又可以兼顾本地使用效率)

答案 1 :(得分:2)

如果您使用的是GitHub Enterprise,则可以设置pre-receive hook来拒绝其中没有JIRA凭单号的提交。

Check out the example here

#!/bin/bash
#
# check commit messages for JIRA issue numbers formatted as [JIRA-<issue number>]

REGEX="\[JIRA\-[0-9]*\]"

ERROR_MSG="[POLICY] The commit doesn't reference a JIRA issue"

while read OLDREV NEWREV REFNAME ; do
  for COMMIT in `git rev-list $OLDREV..$NEWREV`;
  do
    MESSAGE=`git cat-file commit $COMMIT | sed '1,/^$/d'`
    if ! echo $MESSAGE | grep -iqE "$REGEX"; then
      echo "$ERROR_MSG: $MESSAGE" >&2
      exit 1
    fi
  done
done
exit 0