Gerrit 不允许推送代码
Gerrit is not allowing to push the code
我有一个 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 存储库时,是否需要进行任何配置?
您似乎试图将多个提交推送到 Gerrit,但只有最后一个具有 Change-Id。当您将提交推送到 Gerrit 时,Gerrit 中尚不存在的所有父提交也将被推送。查看 Git 日志以检查所有将被推送的提交。
我将对马塞洛的回答做一些补充说明。
假设提交历史是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。在某些情况下,您可能需要它。
为了自动为每个克隆部署挂钩 commit-msg,您可以将此 commit-msg 添加到 Git 的 TEMPLATE DIRECTORY 中。完成此复制后,您可以在现有存储库中 运行 git init
作为将 commit-msg 复制到其中的替代方法。
既然你用的是Gerrit,那我就多说几句。 merge-commit 不会触发挂钩 commit-msg,因此即使已部署挂钩,本地真正的合并也不会有 change-id。这也会阻止推送。所以在推送之前不要使用 git pull origin <branch>
来同步和更新本地分支。 git pull origin --rebase <branch>
或 git fetch origin <branch> && git rebase FETCH_HEAD
哪个更好。这使得在本地没有合并提交。
我有一个 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 存储库时,是否需要进行任何配置?
您似乎试图将多个提交推送到 Gerrit,但只有最后一个具有 Change-Id。当您将提交推送到 Gerrit 时,Gerrit 中尚不存在的所有父提交也将被推送。查看 Git 日志以检查所有将被推送的提交。
我将对马塞洛的回答做一些补充说明。
假设提交历史是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。在某些情况下,您可能需要它。
为了自动为每个克隆部署挂钩 commit-msg,您可以将此 commit-msg 添加到 Git 的 TEMPLATE DIRECTORY 中。完成此复制后,您可以在现有存储库中 运行 git init
作为将 commit-msg 复制到其中的替代方法。
既然你用的是Gerrit,那我就多说几句。 merge-commit 不会触发挂钩 commit-msg,因此即使已部署挂钩,本地真正的合并也不会有 change-id。这也会阻止推送。所以在推送之前不要使用 git pull origin <branch>
来同步和更新本地分支。 git pull origin --rebase <branch>
或 git fetch origin <branch> && git rebase FETCH_HEAD
哪个更好。这使得在本地没有合并提交。