git - 为什么 Gerrit 不将 change-id 包含到 merge 提交中?

标签 git gerrit

所以 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/

相关文章:

Git repo 分支错误修复

Git 垃圾收集似乎没有完全起作用

git - 如何提交之前推送并在gerrit中放弃的文件

git - 仅允许对明确添加的作者的更改进行审查

git - 关于 "Gerrit Change Number"的官方文档

git - 以特殊格式收集存储库中所有分支的列表 [Git]

git - 是否可以在 Github 中使用 'fork a fork'?

java - 错误: Build step failed with exception org. codehaus.cargo.container.ContainerException:无法重新部署

git - 无效 : is this a git repository?

workflow - Gerrit 工作流程 - 将单个提交推送到主题分支