我有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。所以你不需要手动操作