【问题标题】:Ensure github PR squash merge commit comments contain issue ID确保 github PR 壁球合并提交评论包含问题 ID
【发布时间】:2019-03-05 15:37:53
【问题描述】:

如何确保来自 github PR 壁球合并的提交 cmets 包含所需的文本?

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

当用户从他们的私有功能分支合并 PR 时,他们通常会压缩和合并,这意味着用户可以手动将单个提交的意图从该分支汇总到更大的集成分支或主分支。

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

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

【问题讨论】:

  • 我不记得它应该是提交钩子还是 CI 作业。无论哪种方式:通过将清单添加到 pull request template 来帮助您的用户。当你弄清楚时,为支票创建适当的金额of strictness
  • 嗯,我确实有一个模板,但我没有意识到我可以在其中添加最终壁球合并提交消息的要求。
  • 值得注意的是,截至 18 年 10 月,Jira/GitHub 推出了一款可以进行一些额外元数据管理的应用。看看:github.com/marketplace/jira-software-github
  • 非常有趣。我想我们可能已经有了那个工具。但是,如果文本不包含某些预期值,如果仍然无法帮助我阻止单击壁球合并按钮

标签: git github jira pull-request


【解决方案1】:

解决此问题的另一种方法* 是确保提交消息包含分支名称,在 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 问题页面上可靠地回顾提交。

我们已经在我的团队中实施了这项政策,它有几个优点:

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

(作为旁注,以防万一,这种自动行为也可以按需禁用,git commit -n

* (请注意,这两种解决方案并不相互排斥。事实上,您很可能需要两者,Adil's 用于远程 repo 完整性,而这个用于本地使用效率)

【讨论】:

  • github pr 案例中非壁球的一个很好的解决方案。抱歉,我忘了提到这个问题的关键所在。
【解决方案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

【讨论】:

  • github pr 案例中非壁球的一个很好的解决方案。抱歉,我忘了提到这个问题的关键所在。
  • 我正在尝试通过在我的 repo 文件夹/.git/hooks 下保存一个名为 commit-msg.sh 的文件和完全相同的脚本,在我的本地 git 存储库中强制执行相同的 jira 预接收提交钩子其次是 git init。然后在任何源代码文件中进行更改。现在,当我提交它时,它仍然不会在没有 jira 密钥的情况下使其无效。所以看起来它在我当地什么都不做。如何在我的本地强制执行此操作?
猜你喜欢
  • 2016-06-27
  • 2013-10-11
  • 2020-10-17
  • 2018-04-15
  • 2012-02-13
  • 2019-07-18
  • 2020-01-09
  • 1970-01-01
  • 2013-06-06
相关资源
最近更新 更多