Gerrit HEAD:refs/publish/master 块更改

Gerrit HEAD:refs/publish/master blocks change

当尝试使用 git review 将我的更改上传到 gerrit 时,我收到此错误消息:

Fetching gerrit
2018-01-26 13:33:52.161429 Running: git rev-parse HEAD
2018-01-26 13:33:52.166465 Running: git show-ref --quiet --verify refs/remotes/gerrit/master
2018-01-26 13:33:52.172314 Running: git rebase -p -i remotes/gerrit/master
2018-01-26 13:33:53.075322 Running: git reset --hard b8fb53d42c568aaed3216758076b5a5d2df6ebc6
2018-01-26 13:33:53.086334 Running: git config --get-colorbool color.review true
2018-01-26 13:33:53.091360 Running: git log --color=always --decorate --oneline HEAD --not --remotes=gerrit
2018-01-26 13:33:53.098427 Running: git rev-parse --symbolic-full-name --abbrev-ref HEAD
2018-01-26 13:33:53.105430 Running: git log --pretty='%B' HEAD^1..HEAD
Using local branch name "master" for the topic of the change submitted
2018-01-26 13:33:53.113735 Running: git push gerrit HEAD:refs/publish/master
fatal: One or more refs/publish/ names blocks change upload
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

我的 ssh 密钥有效;我可以从 gerrit ssh clone 项目而不会出错; git review -s 工作正常。我的 git 配置:

remote.origin.url=git@gitlab.test.lt:tt-java/service-client.git
remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
branch.master.remote=origin
branch.master.merge=refs/heads/master
remote.gerrit.url=ssh://test.test@review.test.lt:29418/service-client.git
remote.gerrit.fetch=+refs/heads/*:refs/remotes/gerrit/*

gerrit  ssh://test.test@review.test.lt:29418/service-client.git (fetch)
gerrit  ssh://test.test@review.test.lt:29418/service-client.git (push)
origin  git@gitlab.test.lt:tt-java/service-client.git (fetch)
origin  git@gitlab.test.lt:tt-java/service-client.git (push)

git review 是在 osx 上通过自制程序安装的。我读过有关发布到 refs/for/master 的内容,但遇到了同样的错误。知道这里出了什么问题吗?

refs/publish 对比 refs/for

refs/publish/* 只是 refs/for/* 的替代名称 - 使用其中一个没有区别。

问题

您的服务器存储库在 refs/for/ 命名空间下有一个分支。发生这种情况时 Gerrit 拒绝工作,因为现在 refs/for/(通常是 "magical" 分支)实际上是 Git 存储库中的真实分支。

这个分支可能是为用户直接推送到 Git 存储库而不是 Gerrit SSH 端口而错误创建的。

如何修复

要查看哪些引用已存在,Gerrit 管理员需要转到该特定存储库并执行:

git for-each-ref refs/for

他需要删除所有这些引用或将它们重命名为不同的名称。通常删除所有执行以下操作的人是安全的:

for n in $(git for-each-ref --format='%(refname)' refs/for); do git
update-ref -d $n; done

更多信息

here