git在哪里存储gerrit的更改ID?

时间:2015-09-04 18:56:02

标签: git push gerrit

我有git,版本1.9.5.msysgit,并使用Gerrit 2.10作为代码审查工具。我想知道Change-ID存储在本地克隆的存储库中的位置。

成功地将一些更改从我的本地分支推送到远程分支后,git push出乎意料地给出了当前提交的错误:

remote: ERROR: missing Change-Id in commit message footer
remote: Change-Id: I197b74458ae304ad512d96c4ac905c6d3afc4da4

remote: Hint: To automatically insert Change-Id, install the hook:
remote:   gitdir=$(git rev-parse --git-dir); scp -p -P 29418 abc.xyz@serverip:hooks/commit-msg ${gitdir}/hooks/

之前,我遇到了这个错误,我可以将一些更改推送到远程,而不会在同一个克隆分支中出现任何问题。但是,突然间,我收到了这个错误。

当我检查本地日志时,我可以看到当前提交已经有一个Change-Id,但是git push说缺少Change-Id。

commit-msg文件中没有任何更改,实际上用于生成Change-Ids。

如果我能看到存储此Change-Id的位置,也许我可以看到已存在的Change-Id与产生错误消息的那个之间的区别。

我读到了这个https://groups.google.com/forum/#!topic/repo-discuss/aq98R4-4TqI我正在疯狂地挠挠脑袋。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

Git的观点中的change-id只存储在提交的提交消息中。

Gerrit使用这些更改ID来将提交组合在一起(作为补丁集),以构成更改。

确保提交消息和change-id之间有一个空行,并且change-id是最后一行。

例如:

>>git show
commit eafbc99b9343a5e060ece5c95b050c3fc541f292
Author: John Doe <John.Doe@gmail.com>
Date:   Tue Sep 1 16:12:17 2015 -0400

    My commit message header

    This commit is...

    Change-Id: I511a54c1ec18e59615d76f89d57c0a7cc03b6f5c

你可能想重新运行这个命令(来自Git的输出),并修改你的提交:

gitdir=$(git rev-parse --git-dir); scp -p -P 29418 abc.xyz@serverip:hooks/commit-msg ${gitdir}/hooks/

git commit --amend

答案 1 :(得分:0)

Gerrit更改ID只是提交消息的一部分。所以在这里,Gerrit要求您将更改ID添加到提交消息中,以便它可以链接提交更改,反之亦然。

为此,只需使用git commit --amend修改您的提交即可。这将打开您的编辑器,然后只需添加以下行:

Change-Id: I197b74458ae304ad512d96c4ac905c6d3afc4da4

E.g。

This is the commit summary

There can also be some extra text in the commit message.

Change-Id: I197b74458ae304ad512d96c4ac905c6d3afc4da4

通常,您将按照错误消息中的提示建议安装提交挂钩。这样,无论何时提交,都会在提交消息中附加新的更改ID。所以你不需要手动完成。