web-dev-qa-db-ja.com

バンドルバックアップからのgitリポジトリの復元

ローカル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
34
user1283719

簡潔な答え:

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

レイジーバジャーはこれを言ったが、それは最後の段落にあります。 :)

34
fbicknel

新しいバージョンのgitで十分です。

git clone bundle.file

コマンド全体:

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

Yourのgit bareレポジトリコンテンツを完全に復元します(通常のソースと同じようにコンパイルされます)。他のファイルは必要ありません。バンドルファイルで十分です。

次のように、アンバンドルする前に必ずバンドルファイルを確認することをお勧めします。

git bundle verify /path/to/bundle.file 
19
masterdany88

バンドルにはファイルは含まれていませんが、deltas、順番にbaseが必要ですファイルの内容を再作成します。最初にクローンを作成し、後でバンドルを解除する必要があります。バンドルが0の参照を必要とする場合にのみ、クローンの代わりに初期化が許可されます

無視しないでくださいgit bundle verify分離する前

git-bundle(1)-Linuxのマニュアルページ

バンドルファイルが有効であり、現在のリポジトリにクリーンに適用されることを確認するために使用されます。これには、バンドル形式自体のチェック、および前提条件のコミットが存在し、現在のリポジトリに完全にリンクされていることのチェックが含まれます。 git bundleは、欠落しているコミットがあればそのリストを出力し、ゼロ以外のステータスで終了します。

リポジトリを作成している場合は、空のリポジトリを作成してバンドルからオブジェクトをプルまたはフェッチする代わりに、リモートリポジトリであるかのようにバンドルからクローンを作成できます。

8
Lazy Badger