Как вытащить / извлечь с Git * INTO * пустой репозиторий? - PullRequest
10 голосов
/ 26 октября 2011

Я пишу инструмент для резервного копирования всех моих репозиториев из Bitbucket (который поддерживает Git и Mercurial) на мою локальную машину.

Это уже работает для Mercurial, где я это делаюкак это:

  • создать новый пустой репозиторий без рабочей копии на локальной машине
    (аналогично bare Git-репозиторию)
  • извлечь из удаленного репозиторияв локальный пустой репозиторий

Теперь я пытаюсь сделать то же самое с Git.

Я уже обнаружил , что не могу напрямую pull в пустой репозиторий и что я должен использовать fetch вместо.

Итак, я попробовал это:

C:\test>git fetch https://github.com/SamSaffron/dapper-dot-net.git
remote: Counting objects: 1255, done.
remote: Compressing objects: 100% (1178/1178), done.
remote: Total 1255 (delta 593), reused 717 (delta 56)
Receiving objects: 100% (1255/1255), 13.66 MiB | 706 KiB/s, done.
Resolving deltas: 100% (593/593), done.
From https://github.com/SamSaffron/dapper-dot-net
 * branch            HEAD       -> FETCH_HEAD

Очевидно, что Git сделал получить что-то, но локальныйпосле этого репозиторий пуст.
(git log говорит fatal: bad default revision 'HEAD')

Что я делаю не так?

Отказ от ответственности:
У меня есть толькоочень, очень базовые знания Git (я обычно использую Mercurial).
И я использую Windows, если это имеет значение.

Ответы [ 4 ]

15 голосов
/ 26 октября 2011

Попробуйте

git fetch https://github.com/SamSaffron/dapper-dot-net.git master:master
5 голосов
/ 01 ноября 2015

Чтобы сделать резервную копию удаленного репозитория в вашем обычном хранилище, сначала настройте

git config remote.origin.url https://github.com/SamSaffron/dapper-dot-net.git
git config remote.origin.fetch "+*:*"

, а затем просто запустите

git fetch --prune

для резервного копирования.

  • YouВероятно, можно пропустить добавление конфигурации первого набора, так как это должно быть уже установлено при клонировании удаленного репозитория.
  • Также обратите внимание на заключенные в вышеупомянутую команду двойные кавычки ("), чтобы защитить звездочку (* 1013).*) не следует интерпретировать из вашей оболочки.
  • Знак плюса необходим для того, чтобы разрешать обновления без ускоренной пересылки.Это, вероятно, ваше намерение, если вы хотите сделать резервную копию текущего состояния вашего пульта.
  • Опция --prune используется также для удаления уже несуществующих веток.
3 голосов
/ 26 октября 2011

Я думаю, что вы, если вы действительно хотите сделать резервную копию. Вы можете попробовать команду $ git clone --mirror XXXX. он получит почти все из хранилища. Надеюсь, это полезно.

1 голос
/ 03 октября 2014
$ git fetch https://github.com/SamSaffron/dapper-dot-net.git +refs/heads/*:refs/heads/* --prune
...