"Git\Gerrit 远程拒绝:提交信息尾部缺失 Change-Id"

5
首先,我要承认我不是git大师,甚至不是新手。我们安装了gerrit,我能够提交修改到代码库……有时候。以下是我遵循的步骤:
  1. git add file.txt

    git add file2.txt ……以此类推

  2. git commit -m"我的神奇提交信息"
  3. git push origin master:refs/for/master
这个方法9次中有9次都有效,但1次会收到“commit 消息页脚中缺少Change-Id”警告。然后我执行git commit --amend,然后就可以看到提交的信息。
这里我想发泄一下,因为我不理解为什么有时会出现这个问题……。当前提交的--amend会在顶部显示我的消息、一个空行、然后是包含Change-Id的行。然后是另一行空行和下面的注释行(由git添加?)。
如何修复它,并永久地解决这个问题,使我再也不会遇到这个问题?我承认这是我自己知识的不足——100%的责任。
这是我执行 git commit --amend 命令后看到的结果: enter image description here

好的,这真的很烦人...我的提交消息下面有一行空白,Change-Id: 下面还有另一行。 - Jack Smit
不,这是完全正确的... 这就是它的工作方式。 - Marcelo Ávila de Oliveira
由于git-clone不会下载生成Change-Id的钩子commit-msg,因此您可以将此commit-msg复制到Ubuntu的/usr/share/git-core/templates/hooks,以及Windows的/mingw64/share/git-core/templates/hooks/mingw32/share/git-core/templates/hooks。这样,每当您克隆或初始化一个git仓库时,该钩子就会自动部署到当前仓库中。 - ElpieKay
3个回答

4

在提交信息的最后一段必须要包含Change-Id行,这是Gerrit的要求。

你需要了解为什么Change-Id之后还有一些行。当你提交时是否有执行任何钩子?

更新:

你的提交信息没有问题:

  1. 通过commit-msg钩子自动添加了Change-Id行,这是正确的。

  2. 空行也没问题……它是自动添加的,用于将你的消息与Change-Id隔开。

  3. 注释掉的行是Git中的一种东西……只需要注意:“以‘#’开头的行将被忽略”。忽略它们即可。

在保存你的提交后,请执行以下操作:

git log

验证您的提交。

那么,问题出在哪里?为什么Gerrit报告“缺少Change-Id”?

可能是因为问题不在最后一次提交上!可能问题(缺少Change-Id)在父提交中。执行“git log”命令并检查您的提交历史,查找任何没有Change-Id的新提交。


我认为钩子被执行了,因为如果我返回并输入git commit --amend,那么我会看到Change-Id:。 - Jack Smit
是的。如果您没有手动添加Change-Id,则在您的存储库中安装了.git/hooks/commit-msg钩子(您可以检查此内容),该钩子会自动添加Change-Id。当我说“您需要了解为什么Change-Id后面有一些行”时,我的意思是:为什么有时Change-Id会正确生成,而有时会在末尾添加一些“奇怪”的行?请在您的问题中添加一个带有Change-Id后额外行的提交消息示例。 - Marcelo Ávila de Oliveira
添加到原始问题。我甚至尝试删除Change-Id后面的所有内容,但没有成功。我遵循的步骤是:1:git add 2:git commit 3:git push origin master:refs/for/master然后我收到消息... 我执行git commit --amend并删除Change-Id后面的所有行,但没有成功。即使我删除了Change-Id,也没有帮助,但会创建一个新的Change-Id。 - Jack Smit
谢谢Marcelo,下次遇到这种情况我会这样做并更新工单。 - Jack Smit

1

这似乎是 Gerrit 的一个要求

With this error message Gerrit rejects to push a commit to a project which is configured to always require a Change-Id in the commit message if the commit message of the pushed commit does not contain a Change-Id in the footer (the last paragraph).

This error may happen for different reasons:

1. missing Change-Id in the commit message

2. Change-Id is contained in the commit message but not in the last paragraph

提交信息尾行缺少Change-Id问题


这不是Gerrit的问题... 这正是Gerrit的工作方式。 - Marcelo Ávila de Oliveira
我想表达的是,这与git本身无关。 - hspandher
好的。抱歉,我没有理解你的意思。 - Marcelo Ávila de Oliveira
我已经更改了答案以避免混淆。谢谢。 - hspandher

0

在项目的 .git/hooks 文件夹中检查并添加 commit-msg 文件。然后执行 git reset HEAD~,最后添加文件后推送代码更改。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接