我正在处理本地存储库的一个问题,并且我发现这个错误在kernel.org存储库中得到了修复。
所以现在我试图把这个修复从kernel.org分支和cherry-pick
到我的本地gerrit。我正在努力维护kernel.org分支提交的提交消息。
当我尝试在本地gerrit上推送此修复时,我面临以下错误:
To ssh://<username>@123.321.12.1:1234/mirror-sec/asdfgt/hjks
! [remote rejected] <branch> -> refs/for/<branch> (not Signed-off-by author/committer/uploader in commit message footer)
error: failed to push some refs to 'ssh://<username>@123.321.12.1:1234/mirror-sec/asdfgt/hjks'
以下是我所遵循的步骤:
- 已运行
git remote add 'tag' git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux
- 已运行
git fetch 'tag'
- 查找
git log 'tag'/master
中的提交 - 精心挑选所需的特定提交id:
git cherry-pick <commit-id>
- 运行
git commit --amend
,为精心挑选的提交id获得一个新的更改id - 允许
git push
向本地gerrit提交更改:git push ssh://<username>@123.321.12.1:1234/mirror-sec/asdfgt/hjks <branch>:refs/for/<branch>
当我按照上面的步骤操作时,我遇到了上面提到的错误。
我做错了什么吗?我忽略的任何信息都会很有帮助。
谢谢。
对于其他人挠头的答案,你可以试试这个:
git commit --amend -s
Gerrit中的项目可以配置为在提交消息的页脚需要一个signed -off-by,以强制每个更改都由作者、提交者或上传者签名。如果一个项目需要一个Signed-off-by,而提交消息页脚没有包含它,Gerrit会拒绝推送提交,并给出这个错误消息。
此策略可以通过具有Forge Committer的访问权限来绕过。
这个错误可能有不同的原因
如果你没有伪造提交者身份的访问权限:
在提交消息页脚缺少Signed-off-bysigned -off包含在提交消息页脚中,但它既不是来自作者、提交者也不是来自上传者
作者、提交者或上传者的签名包含在提交消息中,但不包含在页脚(最后一段)
为了能够推送你的提交,你可以修改你的提交并添加签名下线或在本地gerrit中使用forge committer选项