所以 git 钩子只会将更改 ID 放入提交中。尽管可以将合并提交推送到审查分支,即使 Gerrit 被配置为在提交消息中需要 Change-Id。并且当合并提交已被推送时,所有后续提交将取决于合并提交 - 因为没有更改 Id。那么不将更改 Id 包含到合并提交中的目的是什么?
问问题
5785 次
1 回答
22
Git 的根本问题是commit-msg
没有冲突的合并提交不会调用钩子。
但是,prepare-commit-msg
需要(任何)合并提交。因此,我目前要让 GerritChange-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
钩子的一部分,一次由 Gitcommit-msg
在提交冲突解决后调用时调用,但这不会导致任何问题,因为 Gerrit 的commit-msg
钩子会检查是否Change-Id
已经已添加,如果是这种情况,则不再添加。
如果你现在问自己为什么 Gerrit 不简单地使用prepare-commit-msg
钩子来添加Change-Id
,我想这只是为了防止用户不小心Change-Id
从提交消息中删除 。commit-msg
在编辑器关闭后将其作为钩子的一部分添加更安全。
于 2014-07-11T07:59:29.800 回答