所以 git 钩子(Hook)只会将更改 Id 放入提交中。尽管可以将 merge 提交推送到审查分支,但即使 Gerrit 被配置为需要提交消息中的 Change-Id。当 merge 提交被推送时,所有后续提交都将取决于 merge 提交——因为没有更改 ID。那么不将更改 Id 包含到 merge 提交中的目的是什么?
最佳答案
Git 中的潜在问题是 commit-msg
钩子(Hook)不会被调用用于没有冲突的 merge 提交。
但是,prepare-commit-msg
会为(任何) merge 提交调用。因此,我目前为使 Gerrit 的 Change-Id
也添加到没有冲突的 merge 提交而做的是使用这样的 prepare-commit-msg
Hook :
#!/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
确保在修改 merge 提交时不会调用 commit-msg
,因为在那种情况下,Git 会直接调用该钩子(Hook)反正。请注意,对于与冲突的 merge 提交,此方法将导致 commit-msg
被调用两次,一次作为此 prepare-commit-msg
的一部分在提交冲突解决方案后调用 commit-msg
时 Git 会 Hook 一次,但这不会导致任何问题,因为 Gerrit 的 commit-msg
Hook 会检查 Change-Id
已经添加了,如果是这样就不再添加了。
如果你现在问自己为什么 Gerrit 不简单地只使用 prepare-commit-msg
钩子(Hook)来添加 Change-Id
,我想这只是以防止用户意外删除提交消息中的 Change-Id
。在编辑器关闭后将它添加为 commit-msg
Hook 的一部分会更安全。
关于git - 为什么 Gerrit 不将 change-id 包含到 merge 提交中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19917025/