восстановление репозитория git из резервной копии пакета - PullRequest
25 голосов
/ 21 марта 2012

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

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

Я вижу, что там есть все ссылки, включая удаленныесозданный 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

Ответы [ 3 ]

28 голосов
/ 10 июня 2013

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

$ 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
...

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

13 голосов
/ 17 июня 2015

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

git clone bundle.file

целых команд:

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

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

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

git bundle verify /path/to/bundle.file 
7 голосов
/ 21 марта 2012

Пакет содержит не файлы, а deltas , вам нужно base для воссоздания содержимого файла. Вы должны сначала клонировать, потом распаковать. Инициализация вместо клона разрешена только в том случае, если для пакета требуется 0 ссылок

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

git-bundle (1) - справочная страница Linux

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

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

...