从捆绑备份恢复git存储库

时间:2012-03-21 15:09:57

标签: git backup restore

我在我提出的How to backup a local Git repository?中创建了我的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 个答案:

答案 0 :(得分:28)

简短回答:

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

懒惰獾说了这个,但它在最后一段。 :)

答案 1 :(得分:12)

我更新版的git就足够了:

git clone bundle.file

整个命令:

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

它将完全恢复您的git裸存储库内容(将按照正常来源进行编译)。 你不需要任何其他文件。捆绑文件就足够了。

在unbundle之前总是验证你捆绑文件是明智的,如下所示:

git bundle verify /path/to/bundle.file 

答案 2 :(得分:7)

捆绑包不包含文件,但增量,您需要基础才能重新创建文件内容。 你必须先克隆,然后再解开。初始化而不是克隆仅在以下情况下允许,其中bundle需要0 refs

在分拆之前不要忽略git bundle verify

git-bundle(1) - Linux man page

  

用于检查捆绑文件是否有效并将干净地应用于   当前的存储库。这包括检查捆绑包格式   本身以及检查先决条件提交是否存在和   在当前存储库中完全链接。 git bundle打印一个列表   缺少提交(如果有),并以非零状态退出。

如果您正在创建存储库,那么您可以从包中克隆,就好像它是一个远程存储库,而不是创建一个空的存储库,然后从包中提取或提取对象