Gerrit不允许推送代码

时间:2017-02-02 10:44:07

标签: git gerrit egit

我有一个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时,是否有任何配置要做?

2 个答案:

答案 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更好。这使得本地没有合并提交。