Git Gerrit不允许推送代码

Git Gerrit不允许推送代码,git,gerrit,egit,Git,Gerrit,Egit,我有一个git存储库,在那里我创建了一个项目。目前已有一些项目运作良好 现在我想推送这个新项目的代码,我已经在提交中添加了GerritChangeID,但在尝试推送时仍然会出现以下错误。 我正在使用egit(EclipseGit)作为git客户端 missing Change-Id in commit message footer Processing changes: refs: 1 Processing changes: refs: 1, done ERROR: missing C

我有一个git存储库,在那里我创建了一个项目。目前已有一些项目运作良好

现在我想推送这个新项目的代码,我已经在提交中添加了GerritChangeID,但在尝试推送时仍然会出现以下错误。 我正在使用egit(EclipseGit)作为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中添加新项目时,是否需要进行任何配置?

似乎您正在尝试向gerrit推送多个提交,但只有最后一个提交具有Change-Id。当您向gerrit推送提交时,gerrit中还不存在的所有父提交也将被推送。查看Git日志以检查将要推送的所有提交。

似乎您正在尝试将多个提交推送到Gerrit,但只有最后一个提交具有Change-Id。当您将提交推送到Gerrit时,Gerrit中还不存在的所有父提交也将被推送。查看Git日志以检查将被推送的所有提交。

我将对Marcelo的回答做一些补充说明

假设提交历史是
A-B-C-D
。C和D是你新做出的承诺。如果C或D没有更改id,则推送被阻止。在这种情况下,您需要在另一次推送之前重写C和D的提交消息(假设两者都没有变更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.
如果存在现有变更id,您可以删除整个变更id行,保存并退出,以便commit msg生成新的变更id。在某些情况下,您可能需要它

为了为每个克隆自动部署钩子提交消息,您可以将这个提交消息添加到Git的。在此复制之后,您可以在现有的repo中运行
gitinit
,作为将commit消息复制到其中的替代方法


既然你用的是Gerrit,我想说更多。合并提交不会引发钩子提交消息,因此即使钩子已经部署,本地真正的合并也不会有更改id。这也会阻碍推动。因此,在推送之前,不要使用git pull origin来同步和更新本地分支。无论是
git-pull-origin--rebase
还是
git-fetch-origin&&git-rebase-fetch\u-HEAD
都更好。这使得本地没有合并提交。

我将对Marcelo的回答作一些补充说明

假设提交历史是
A-B-C-D
。C和D是你新做出的承诺。如果C或D没有更改id,则推送被阻止。在这种情况下,您需要在另一次推送之前重写C和D的提交消息(假设两者都没有变更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.
如果存在现有变更id,您可以删除整个变更id行,保存并退出,以便commit msg生成新的变更id。在某些情况下,您可能需要它

为了为每个克隆自动部署钩子提交消息,您可以将这个提交消息添加到Git的。在此复制之后,您可以在现有的repo中运行
gitinit
,作为将commit消息复制到其中的替代方法

既然你用的是Gerrit,我想说更多。合并提交不会引发钩子提交消息,因此即使钩子已经部署,本地真正的合并也不会有更改id。这也会阻碍推动。因此,在推送之前,不要使用git pull origin来同步和更新本地分支。无论是
git-pull-origin--rebase
还是
git-fetch-origin&&git-rebase-fetch\u-HEAD
都更好。这不会在本地文件中进行合并提交