我关注此文档: https://help.github.com/articles/duplicating-a-repository/
git clone --mirror https://github.com/exampleuser/repository-to-mirror.git
cd repository-to-mirror.git
git push --mirror https://github.com/exampleuser/mirrored
输出显示存储库是作为镜像推送的,但出于某种原因我也遇到了这些错误:
! [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)
这些错误是什么?我可以假设存储库已镜像了吗?
答案 0 :(得分:18)
正如this issue中所提到的那样,当您镜像GitHub仓库时会发生这种情况,该仓库有拉取请求。
参考开头'
refs/pull
'是由GitHub创建的合成只读引用 - 您无法更新(因此清除它们),因为它们反映了实际上可能来自其他存储库的分支 - 提交拉取请求的分支给你。所以,当你推动所有真实参考时,拉动请求不会得到更新
您需要mirror a GitHub repo without their pull requests。
只需将上面的catch-all refspec替换为两个更具体的规格,只包含所有头部和标签,但不包括拉力,所有远程拉动参考将不再进入裸镜:
fetch = +refs/heads/*:refs/heads/*
fetch = +refs/tags/*:refs/tags/*
fetch = +refs/change/*:refs/change/*
答案 1 :(得分:2)
答案 2 :(得分:2)
(我希望这只是一个评论,但声望不足)
根据@VonC的回答,这听起来像是一个问题。
因此,当您推送所有真实引用时,提取请求不会得到更新
我看到了您要复制存储库的两种情况。
在任何一种情况下,看来git clone --mirror
是最安全的选择,因为即使您看到push
中的错误,所有与非请求请求相关的内容也都已成功推送,这可以解决方案1。对于方案2,您希望这些请求请求引用作为备份的一部分。
答案 3 :(得分:1)
在https://www.metaltoad.com/blog/git-push-all-branches-new-remote
找到了可行的简单解决方案git push newremote refs/remotes/oldremote/*:refs/heads/*
或
git push newremote refs/remotes/oldremote/features/*:refs/heads/features/*
答案 4 :(得分:1)
完整步骤:
git clone --bare https://github.com/exampleuser/old-repository.git
cd old-repository
git push --mirror https://github.com/exampleuser/new-repository.git