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



我有git,版本1.9.5。我使用Gerrit 2.10作为代码审查工具。我想知道更改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。

在实际用于生成change - id的commit-msg文件中没有任何更改。

如果我能看到这个Change-Id被存储在哪里,也许我就能看到已经存在的Change-Id和产生错误消息的Change-Id之间的区别。

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

从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

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

要做到这一点,只需使用git commit --amend修改提交。这将打开编辑器,然后在末尾添加以下行:

Change-Id: I197b74458ae304ad512d96c4ac905c6d3afc4da4

This is the commit summary
There can also be some extra text in the commit message.
Change-Id: I197b74458ae304ad512d96c4ac905c6d3afc4da4

通常,您将按照错误消息中的提示安装提交钩子。这样,无论何时提交,都会向提交消息添加一个新的更改ID。所以你不需要手动操作

最新更新