Восстановление репозитория git из резервной копии пакетов

Я создал резервные копии моего репозитория git, как в Как создать резервную копию локального репозитория git? с

git bundle create /tmp/foo-all --all

Я вижу, что все ссылки находятся там, включая удаленный ref, созданный git -svn. Теперь я не могу понять, как восстановить этот пакет в локальном репозитории. Я совершенно уверен, что уже сделал это уже однажды. Я пробовал git -clone, но это дает мне просто репозиторий с моим резервным пакетом в качестве удаленного репо.

Я также пробовал

git init
git bundle unbundle /tmp/foo --all 

но это просто перечисляет все ссылки...

Проверка пакета дает:

$ git bundle verify $somewhere/foo.bundle 
The bundle contains 12 refs
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx refs/heads/xxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx refs/heads/xxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx refs/heads/xxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx refs/heads/xxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx refs/heads/xxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx refs/heads/xxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx refs/heads/xxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx refs/heads/master
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx refs/heads/xxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx refs/heads/xxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx refs/remotes/git-svn
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx HEAD
The bundle requires these 0 ref
$somewhere/foo.bundle is okay

Ответ 1

Короткий ответ:

$ git bundle verify $somewhere/foo.bundle
$ git clone $somewhere/foo.bundle
Cloning into 'foo'...
Receiving objects: 100% (10133/10133), 82.03 MiB | 74.25 MiB/s, done.
Resolving deltas: 100% (5436/5436), done.
$ cd foo
$ git status
...

Ленивый Барсук сказал это, но это в последнем абзаце.:)

Ответ 2

Bundle содержит не файлы, а deltas, вам нужно базовое, чтобы воссоздать содержимое файла. Сначала нужно клонировать, разделить его позже. Init вместо clone разрешен только в случае, если для пакета требуется 0 refs

Не игнорируйте git bundle verify до разделения

git -bundle (1) - страница руководства Linux

Используется для проверки того, что файл пакета действителен и будет применяться текущий репозиторий. Это включает проверки формата пакета а также проверку того, что обязательные условия существуют, и полностью связаны в текущем репозитории. Пакет git печатает список отсутствующие коммиты, если они есть, и выходы с ненулевым статусом.

Если вы создаете репозиторий, вы можете клонировать из пакета, как если бы это был удаленный репозиторий, вместо создания пустого репозитория, а затем потянув или извлекая объекты из пакета

Ответ 3

Мне более новой версии git достаточно:

git clone bundle.file

все команды:

mkdir ~/git
cd ~/git
git clone /path/to/bundle.file

Он полностью восстановит ваш контент git голый репозиторий (который будет компилироваться как обычный источник). Вам не нужен другой файл. Файл пакета достаточно.

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

git bundle verify /path/to/bundle.file