为什么Gerrit不将change-id包含在合并提交中?

时间:2013-11-11 22:14:32

标签: git gerrit

所以git hook只将更改Id放入提交。尽管可以将合并提交推送到审阅分支,甚至Gerrit也被配置为在提交消息中要求Change-Id。并且当推送合并提交时,所有后续提交将取决于合并提交 - 因为没有更改Id。那么不将变更ID包含在合并提交中的目的是什么?

1 个答案:

答案 0 :(得分:22)

Git中的根本问题是没有冲突就没有调用commit-msg钩子进行合并提交。

但是,prepare-commit-msg被调用(任何)合并提交。所以我目前所做的是让Gerrit的Change-Id也添加到合并提交而没有冲突是使用这样的prepare-commit-msg钩子:

#!/bin/sh

if [ "$2" = "merge" -a -f .git/MERGE_MSG ]; then
    # Explicitly call Gerrit's commit-msg hook for merge commits.
    .git/hooks/commit-msg "$1"
fi

检查.git/MERGE_MSG可确保在修改合并提交时不会调用commit-msg,因为在这种情况下,无论如何都会由Git直接调用该挂钩。请注意,对于合并提交冲突,此方法将导致commit-msg被调用两次,一次作为此prepare-commit-msg挂钩的一部分,一次通过Git调用{{1}提交冲突解决后,但这不会导致任何问题,因为Gerrit的commit-msg挂钩检查commit-msg是否已经添加,如果已经添加Change-Id则不会再添加案件。

如果您现在问自己为什么Gerrit不仅仅使用prepare-commit-msg挂钩来添加Change-Id,我想这只是为了防止用户意外删除{{ 1}}来自提交消息。