我正在尝试创建一个可以将我的git存储库镜像到另一个存储库的脚本。一切都很顺利,但它一直在说
[remote rejected] refs/pull/xx/head -> refs/pull/xx/head (The current action can only be performed by the system.)
将存储库克隆到我计算机上的文件夹中,然后推送到另一个git。克隆并按原样克隆所有文件和历史记录,但这个“错误”不断出现。我能做什么?
这是我的剧本
git clone --mirror https://path1.com/_git/fredagsproject1
cd fredagsproject1.git
git remote set-url --push origin https://path2.com/_git/fredagsproject2
git push --mirror
答案 0 :(得分:4)
当您运行git push
时,您让Git通过互联网电话拨打另一个Git。你的Git向Git提交一些对象(提交等),然后向Git发送一堆请求:
refs/heads/branch
以指向提交1234567...
refs/tags/v1.2
设置为指向带注释的标记对象fedcba9...
之类的。
使用git push --mirror
告诉您的Git要求他们的 Git设置您拥有的每个名称,并在请求中使用完全相同的名称。如图所示(并且您已复制到文本行),其中许多名称的格式为:
refs/pull/xx/head
对于一些两位数的xx
序列。
他们的Git只是说不:我拒绝设置这个名字。
您可以尝试添加--force
,它会告诉您的Git发送命令 - 设置这些名称! - 而不是礼貌请求,请设置这些名称,但请查看他们的Git与拒绝一起返回的原因:
The current action can only be performed by the system.
这似乎在说:放下这个名字!我保留它用于我的使用,你怎么敢让我改变我的 refs/pull/73/head
!在这种情况下命令表格(而不是礼貌请求表格也可能被拒绝。
请注意,refs/pull/number/head
和refs/pull/number/merge
形式的引用名称由GitHub内部使用,用于管理拉取请求。您甚至不应该尝试设置这些名称 - 所以如果您的尝试失败,那可能是好事。
答案 1 :(得分:0)
这是@torek回答的后续内容。为避免远程拒绝错误,请尝试使用以下命令代替git push --mirror
。
git push --all
git push --tags
--all
选项将所有引用推送到/refs/heads/
下,并且
--tags
选项会将所有引用推送到/refs/tags
下。
大多数遥控器会很乐意接受这些参考。虽然可以在以上命令中使用--force
选项,但这是一种破坏性操作。行使此选项时要格外小心。