3

如何从备份(git bundle)中恢复所有远程分支。

备份:

$ 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 回答