Как вытащить / извлечь с Git *INTO* пустой репозиторий?
Я пишу инструмент для резервного копирования всех моих репозиториев из 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 ответа
Пытаться
git fetch https://github.com/SamSaffron/dapper-dot-net.git master:master
Чтобы сделать резервную копию удаленного репозитория в вашем обычном репозитории, настройте сначала
git config remote.origin.url https://github.com/SamSaffron/dapper-dot-net.git
git config remote.origin.fetch "+*:*"
а потом просто беги
git fetch --prune
для резервного копирования.
- Вы, вероятно, можете пропустить добавление первой конфигурации, так как это должно быть уже установлено при клонировании удаленного репозитория.
- Пожалуйста, обратите внимание на двойные кавычки (
"
) в приведенной выше команде для защиты звездочки (*
) не следует интерпретировать из вашей оболочки. - Знак плюс необходим, чтобы разрешить обновления без ускоренной пересылки. Это, вероятно, ваше намерение, если вы хотите сделать резервную копию текущего состояния вашего пульта.
- вариант
--prune
используется также для удаления уже несуществующих веток.
Я думаю, что если вы действительно хотите сделать резервную копию. Ты можешь попробовать $ git clone --mirror XXXX
команда. он получит почти все из хранилища. Надеюсь, это полезно.
$ git fetch https://github.com/SamSaffron/dapper-dot-net.git +refs/heads/*:refs/heads/* --prune