git push命令中的致命错误

时间:2018-05-12 06:19:18

标签: git push fatal-error

我正在尝试使用以下命令推动Gerrit的更改,

git push origin HEAD:refs/for/audi

但是我收到以下错误:

fatal: One or more refs/for/ names blocks change upload
fatal: Could not read from remote repository.

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

我在SO和其他网站尝试了其他解决方案,但没有成功,如:

https://review.typo3.org/Documentation/error-change-upload-blocked.html

命令:

git for-each-ref refs/for

什么都不返回。

我很难向客户提供重要的软件交付,请帮助。

注意: git remote的响应如下:

  

git remote -v

     

origin ssh://14.140.172.187:29418 / android_m / hlos / platform / build   (读取)

     

origin ssh://14.140.172.187:29418 / android_m / hlos / platform / build(push)

1 个答案:

答案 0 :(得分:1)

虽然您可能没有要删除的任何本地refs/for分支(因为您提到命令git for-each-ref refs/for什么都不返回),Gerrit documentation for that error message确实规定了:

  

refs/for/”命名空间下的分支可以由绕过Gerrit的用户创建,直接推送到git存储库本身(不使用Gerrit服务器的SSH端口)

首先使用git remote -v检查原点所引用的内容(它应该是gerrit服务器) 但是还要检查代理的最终仓库是否正在使用Gerrit仓库:这是没有/refs/for分支的地方。在 远程仓库中,您应该删除任何refs/for分支。

https://gerrit-documentation.storage.googleapis.com/Documentation/2.15.1/images/intro-quick-central-gerrit.png

“那个”回购意味着“权威”回购。

如果你有权直接推送到那个远程仓库(再次,不是Gerrit那个,而是Gerrit应该推送到那个),你需要删除那些远程分支。
克隆该repo,应用doc中提到的命令:

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

然后用git push --mirror推回。

如果您无权推送到该远程客户端仓库,请联系客户并要求在该目标仓库中进行清理。