Gerrit HEAD:refs / publish / master blocks更改

时间:2018-01-26 11:53:15

标签: git gerrit git-review

尝试使用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,但同样的错误。有什么想法吗?

1 个答案:

答案 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