! 镜像git存储库后出现[remote rejected]错误

! 镜像git存储库后出现[remote rejected]错误,git,repository,mirror,Git,Repository,Mirror,我遵循以下文档: 输出显示存储库是作为镜像推送的,但出于某些原因,我也遇到了以下错误: ! [remote rejected] refs/pull/1/head -> refs/pull/1/head (deny updating a hidden ref) ! [remote rejected] refs/pull/1/merge -> refs/pull/1/merge (deny updating a hidden ref) 这些错误是什么?我可以假设存储库已镜像吗?如

我遵循以下文档:

输出显示存储库是作为镜像推送的,但出于某些原因,我也遇到了以下错误:

 ! [remote rejected] refs/pull/1/head -> refs/pull/1/head (deny updating a hidden ref)
 ! [remote rejected] refs/pull/1/merge -> refs/pull/1/merge (deny updating a hidden ref)
这些错误是什么?我可以假设存储库已镜像吗?

如中所述,当您镜像一个GitHub repo时,会发生这种情况,它已向它发出请求

以“
refs/pull
”开头的ref是由GitHub创建的合成只读ref,您不能更新(因此也不能“清理”)它们,因为它们反映的分支可能实际上来自其他存储库,也就是向您提交pull请求的存储库

因此,虽然您推送了所有真实的引用,但拉取请求不会得到更新

你需要这样做

只需使用两个更具体的规范替换上面的“全部捕捉”参照规范,以仅包含所有头部和标记,而不包括拉动,并且所有远程拉动参照将不再包含在裸镜中:

而不是

git克隆--mirror

使用

git克隆--bare

(我希望这是一个评论,但声誉不够)

根据@VonC的回答,这似乎不是问题

因此,虽然您推送了所有真实的引用,但拉取请求不会得到更新

我看到了两种您希望复制存储库的场景

  • 您需要一份您完全控制的回购协议的备份/副本
  • 您正在修改回购的历史记录,并且需要本地备份,以防需要撤消更改
    在这两种情况下,
    git clone--mirror
    似乎是您最安全的选择,因为即使您在
    push
    中看到错误,所有与请求无关的内容都被成功推送,这就解决了场景1。对于场景2,您希望这些请求引用作为备份的一部分

    在那里找到了有效且简单的解决方案


    谢谢,我已经完成了这个过程,但是由于某些原因,我仍然会遇到同样的错误。我用镜像复制了回购协议,我用
    git config-e
    编辑git配置,然后运行-
    git remote update
    git push mirror
    ,仍然得到相同的错误。@deezx返回什么
    git配置--get regex remote.origin.fetch
    ?这是输出-$git配置--get regex remote.origin.fetch remote.origin.fetch+refs/heads/*:refs/heads/*remote.origin.fetch+refs/tags/*:refs/tags/*实际上,当我在没有--mirror的情况下克隆存储库时,正如您编写的那样编辑git配置,它工作了。它只获取分支和标签,所以它工作了!我现在唯一的问题是,我看到它没有反映
    refs/changes
    。有没有办法告诉git获取除pull请求以外的所有请求(
    refs/pull
    )?@deezx没有,您需要添加
    +refs/changes/*:refs/changes/*
    ,它才能获取
    标签
    更改
    ,但不能
    pull
    。在那之后,
    git-push--mirror
    还能工作吗?确保在一个新的本地克隆中重试(不是
    clone--mirror
    ,只是简单的克隆,在其中添加fetch refspec,执行
    git fetch
    ,然后
    push--mirror
    到另一个repo)我更喜欢senario 2,在这里我想完全迁移我的存储库(并且非常有兴趣保留任何pull请求的历史记录). 我该如何找到一个使它们保持完整的解决方案(即github repo-->镜像克隆-->gitlab(或其他vcs))
     ! [remote rejected] refs/pull/1/head -> refs/pull/1/head (deny updating a hidden ref)
     ! [remote rejected] refs/pull/1/merge -> refs/pull/1/merge (deny updating a hidden ref)
    
    fetch = +refs/heads/*:refs/heads/*
    fetch = +refs/tags/*:refs/tags/*
    fetch = +refs/change/*:refs/change/*
    
    git push newremote refs/remotes/oldremote/*:refs/heads/*
    
    git push newremote refs/remotes/oldremote/features/*:refs/heads/features/*