我有一个从 svn 存储库创建的本地 git 存储库:
$ git svn clone -s svn:...
然后我创建了一个备份 Remote 并将所有内容推送给它:
$ git remote add backup git@myhost:mybackup.git
$ git push --mirror backup
现在,当我尝试从我的备份中克隆时,它丢失了所有 svn 标签和分支。
$ git clone git@myhost:mybackup.git
$ cd mybackup
$ git branch -a
* master
origin
remotes/origin/HEAD -> origin/master
remotes/origin/master
如何克隆包含所有标签和分支的存储库?
我找到的唯一方法是镜像 repo:
$ git clone --mirror git@myhost:mybackup.git
这会创建一个本地 mybackup.git
目录,它知道所有标签/分支(我可以使用制表符完成来获取整个列表)但它不是一个有效的可用 repo:
$ git checkout mytag
fatal: This operation must be run in a work tree
必须有命令行选项才能真正克隆带有所有分支/标签的 repo???
我在这里发现了几个相关的问题,但没有一个答案适用于这种情况。我认为不同之处在于我的克隆是使用 --mirror
?
最佳答案
有两种方法可以改进你的命令 git clone --mirror git@myhost:mybackup.git
我找到的是这个,知道你的命令创建了一个 mybackup.git 目录:
mkdir mybackup
mv mybackup.git mybackup/.git
cd mybackup
git init
在那里,你有一个完整的工作目录。
或者您可以在此页面上阅读:https://git.wiki.kernel.org/index.php/Git_FAQ#How_do_I_clone_a_repository_with_all_remotely_tracked_branches.3F
git clone --mirror git@myhost:mybackup.git mybackup/.git
cd mybackup
git config --bool core.bare false
我认为直到最后一行,两者都是等价的,并且命令 git config --bool core.bare false
可能比执行 git init
更干净。
总而言之,--mirror 创建的是裸仓库而不是工作仓库,因此您需要将其转换为工作仓库。
关于git - 如何从 refs/remotes 克隆一个包含所有分支和标签的 git repo?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18006757/