3

バックアップからすべてのリモート ブランチを復元する方法 (git バンドル)。

バックアップ:

$ git bundle create /tmp/dp --all
$ git bundle list-heads /tmp/dp | head -n5
f37c9fc7f0ce121568f42fb01390b1862c67f308 refs/heads/master
f37c9fc7f0ce121568f42fb01390b1862c67f308 refs/heads/show
9aabc2a4fb18181fee6d0e7e03170a976b6ed49b refs/remotes/origin/NewLayers
aef1fc8a416413ee5b7f4370f255ab654b3407ee refs/remotes/origin/elevator
bc4c78f94a67857fbd7210ecc5ebcd80ec736b1a refs/remotes/origin/elevator_1
$ git bundle verify /tmp/dp | head -n1
/tmp/dp is okay
The bundle contains 65 refs

戻す:

$ git clone /tmp/dp dp
Cloning into dp...
$ cd dp
$ git branch -a
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/master
  remotes/origin/show

フェッチしてプルしようとしましたが、役に立ちませんでした。

また、「--mirror」でクローンを作成してベアレポを作成し、そこからクローンしようとしましたが、結果は同じでした。

4

1 に答える 1

2

問題は、リモート リポジトリのリモート ブランチのクローン作成時に追跡されないことです (そして、リモート リポジトリのローカル ブランチはリモート追跡ブランチとして追跡されます)。あなたの質問では言いませんでしたが、作成された(裸の)リポジトリ--mirrorにはリモート追跡ブランチが含まれていたと思います。

したがって、正しいことは次のとおりです。

git clone --mirror /tmp/dp
mkdir dp
mv dp.git dp/.git
cd dp
git config core.bare false
git reset --hard

(つまり、 --mirror でクローンを作成し、暗黙の --bare を元に戻します。) きれいではありませんが、機能します。または、git-init を使用して新しい空のリポジトリを作成し、/tmp/dp を次の行でリモートとして定義します。

fetch = +refs/*:refs/*

通常の代わりに

fetch = +refs/heads/*:refs/remotes/remotename/*

そしてそこから取り出します。

于 2012-08-17T10:00:51.037 に答える