推送大型github存储库失败,并显示“无法推送到不合格的目的地:主服务器”


69

我有一个很大的git repo(从SVN repo创建),我想将其推送到github。鉴于它很大,我不能直接尝试将其推入,因为它会因“包装太大”错误而失败。

到目前为止一切顺利,我可以一次推送一次回购。但是,当我尝试执行此操作时,会发生以下情况:

git push origin 86c310d8a680d6d0e052fa7db89adb25348f3e54:master
error: unable to push to unqualified destination: master
The destination refspec neither matches an existing ref on the remote nor
begins with refs/, and we are unable to guess a prefix based on the source ref.

因此,远程仓库中还没有master分支,但是我试图将其推送到它,但是失败了。

我该如何解决?或如何在远程上创建一个空的master分支以便推送到它?

Answers:


127

推送至refs/heads/master,仅此一次。

git push origin whatever:refs/heads/master

它将明确地将其创建为分支,并且将来您将能够正常推送到它。

之所以可行,是因为没有名为master的远程ref(尚未创建),目标ref还没有使用refs /完全限定,因此git无法根据此来确定,而源ref是哈希而不是名称,因此也无法根据该名称来确定。通过推送到refs / heads / master,它可以工作,因为第二个条件为真,然后主机上存在master,因此第一个条件为真


16
@hobbs您能否解释一下这是如何/为什么工作以及为什么问题首先存在的更多信息?您的解决方案解决了问题,但我不知道为什么:X
sleepycal

1
您按下Push是refs/heads/master什么意思,您执行的命令是什么?
xApple

5
@xapplegit push origin whatever:refs/heads/master
霍布斯

2
@sleepycal的确切原因在错误消息中。没有命名的远程引用master(尚未创建),目标引用还没有完全合格,refs/因此git无法根据该引用确定它,源引用是哈希而不是名称,因此它也不能基于此来解决。通过推动refs/heads/master它起作用是因为第二个条件为真,然后master在遥控器上存在,因此第一个条件为真。
hobbs

4
@sleepycal git-scm.com/book/en/v2/Git-Internals-Git-References讨论了在您的.git/refs机头,标签和遥控器中看到的三种参考类型。@hobbs提到了为什么git无法推断远程更新中应该更新或创建的引用。您可以使用以下命令列出当前已知的参考:git show-ref用于您的机车存储库(包括它知道的任何远程参考)以及git ls-remote <remoterepo>远程参考。(
可惜

2

您也可以使用

git checkout -b branchName

然后将您的git存储库推送到该分支

git push origin whatever:branchName


0

我遇到了同样的错误,发现我的分支名称拼写错误。因此,您可能会发现仔细检查分支名称以确保所有大写字母等都位于正确的位置。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.