Как вытащить/извлечь с помощью Git * INTO * голый репозиторий?

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

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

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

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

I уже узнал, что я не могу напрямую 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, если это имеет значение.

Ответ 1

Try

git fetch https://github.com/SamSaffron/dapper-dot-net.git master:master

Ответ 2

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

Ответ 3

$ git fetch https://github.com/SamSaffron/dapper-dot-net.git +refs/heads/*:refs/heads/* --prune

Ответ 4

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

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

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

git fetch --prune

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

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