git - 如何从 refs/remotes 克隆一个包含所有分支和标签的 git repo?

标签 git clone git-svn git-branch mirror

我有一个从 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/

相关文章:

Git-svn:创建并推送一个新的分支/标签?

python - 如何自动从 Heroku 上的 git 子模块中提取最新提交?

git - AWS-Ubuntu-Git 安装错误致命 : $HOME not set

mercurial - 无法通过 http 克隆 mercurial (hg) 存储库

macos - Git 命令在 Mac 终端 : "dyld: Symbol not found: ___strlcpy_chk" error 中不起作用

git - 如何将现有的 Intellij IDEA 项目从 SVN 切换到 Git SVN

svn - 如何使用 Subversion 获得 master-master 复制?

bash - 别名命令执行不正确

git - 刚刚在我的电脑上创建了一个 Git 仓库。如何将 repo 放到 GitHub 中?

java - 克隆字符串数组,检查引用