尝试使用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中删除克隆项目;和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上的homebrew安装的。我已经阅读了关于发布到refs/for/master
,但同样的错误。有什么想法吗?
答案 0 :(得分:1)
参考/发布vs refs / for
refs/publish/*
只是refs/for/*
的另一个名称 - 使用其中一个没有区别。
问题
您的服务器存储库在refs/for/
命名空间下有一个分支。 Gerrit在发生这种情况时拒绝工作,因为现在refs/for/
(通常是一个"魔法"分支)实际上是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。