我有一个git存储库,我在其中创建了一个项目。已有一些现有项目正常运作。
现在我想推送这个新项目的代码,我在提交中添加了gerrit change-id但是在尝试推送时仍然遇到以下错误。 我使用egit(eclipse git)作为git客户端
missing Change-Id in commit message footer
Processing changes: refs: 1
Processing changes: refs: 1, done
ERROR: missing Change-Id in commit message footer
Hint: To automatically insert Change-Id, install the hook:
gitdir=$(git rev-parse --git-dir); scp -p -P 29418 i054564@git.wdf.sap.corp:hooks/commit-msg ${gitdir}/hooks/
And then amend the commit:
git commit --amend
当我将一个新项目添加到gerrit的现有git repo时,是否有任何配置要做?
答案 0 :(得分:2)
您似乎尝试向Gerrit推送多个提交,但只有最后一个提交具有Change-Id。当您将提交推送到Gerrit时,Gerrit中尚不存在的所有父提交也将被推送。看一下Git日志,检查所有将要推送的提交。
答案 1 :(得分:1)
我还要对Marcelo的回答做一些补充。
假设提交历史记录为A-B-C-D
。 C和D是你新提交的。如果C或D没有change-id,则推送被阻止。在这种情况下,您需要在另一次推送之前重写C和D的提交消息(让他们说两者都没有change-id)。
首先安装挂钩,如错误日志所示。
gitdir=$(git rev-parse --git-dir); scp -p -P 29418 i054564@git.wdf.sap.corp:hooks/commit-msg ${gitdir}/hooks/
运行git log
以检查提交。
重写提交消息。
git reset B --hard
git cherry-pick C
git commit --amend
#simply save and quit
git cherry-pick D
git commit --amend
#simply save and quit.
如果存在change-id,则可以删除整个change-id行,保存并退出,以便commit-msg生成新的change-id。在某些情况下,您可能需要它。
为了为每个克隆自动部署hook commit-msg,您可以将此commit-msg添加到Git' s TEMPLATE DIRECTORY中。在此副本之后,您可以在现有仓库中运行git init
,作为将commit-msg复制到其中的替代方法。
由于您使用的是Gerrit,我想说更多。合并提交不会引发钩子commit-msg,因此即使已经部署了钩子,本地真正的合并也不会具有change-id。这也会阻止推动。因此,在推送之前,请不要使用git pull origin <branch>
来同步和更新本地分支。 git pull origin --rebase <branch>
或git fetch origin <branch> && git rebase FETCH_HEAD
更好。这使得本地没有合并提交。