所以git hook只将更改Id放入提交。尽管可以将合并提交推送到审阅分支,甚至Gerrit也被配置为在提交消息中要求Change-Id。并且当推送合并提交时,所有后续提交将取决于合并提交 - 因为没有更改Id。那么不将变更ID包含在合并提交中的目的是什么?
答案 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}}来自提交消息。 1}}钩子在编辑器关闭后添加它只是更安全。