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。
当尝试使用 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。