git push --mirror给出“无法推送一些引用”

时间:2017-10-06 10:04:15

标签: git

我正在尝试创建一个可以将我的git存储库镜像到另一个存储库的脚本。一切都很顺利,但它一直在说

[remote rejected] refs/pull/xx/head -> refs/pull/xx/head (The current action can only be performed by the system.)

将存储库克隆到我计算机上的文件夹中,然后推送到另一个git。克隆并按原样克隆所有文件和历史记录,但这个“错误”不断出现。我能做什么?

enter image description here

这是我的剧本

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

2 个答案:

答案 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/headrefs/pull/number/merge形式的引用名称由GitHub内部使用,用于管理拉取请求。您甚至不应该尝试设置这些名称 - 所以如果您的尝试失败,那可能是好事

答案 1 :(得分:0)

这是@torek回答的后续内容。为避免远程拒绝错误,请尝试使用以下命令代替git push --mirror

git push --all
git push --tags

--all选项将所有引用推送到/refs/heads/下,并且 --tags选项会将所有引用推送到/refs/tags下。

大多数遥控器会很乐意接受这些参考。虽然可以在以上命令中使用--force选项,但这是一种破坏性操作。行使此选项时要格外小心。