svn - 克隆一个 git-from-svn 存储库并获取所有远程分支

标签 svn git version-control tags branch

我正在努力了解如何能够从 Subversion 克隆一个 git 存储库,然后将该存储库克隆到另一台机器(git-to-git)并且仍然可以访问所有原始的 Subversion 分支和标签。这是我所做的,以及我遇到障碍的地方。

首先,在机器 A 上,我将我的 Subversion 存储库克隆到一个 git 存储库中:

[machine A]$ git svn clone -s http://svn.repo.url/MyProject

这给了我一个 git 存储库,其中包含我原始 Subversion 存储库的全部历史以及所有分支和标签:

[machine A]$ git branch -r
* master
  remotes/v1
  remotes/v1.1
  remotes/v1.2
  remotes/test_migration
  remotes/tags/20100104
  remotes/tags/20100308
  remotes/trunk

现在,在机器 B 上,我想克隆那个 git 存储库,并且仍然可以访问所有原始的 Subversion 分支和标签。首先,我克隆了存储库:

[machine B]$ git clone machine.a:git/MyProject

这让我得到了 git 存储库的克隆...但是我没有看到任何远程分支或标签:

[machine B]$ git branch -a
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/master

无论我尝试哪种形式的 git checkout --track -b [branch] origin/[branch],我都无法在机器 B 上创建一个分支来跟踪其中一个远程, originally-from-svn branches... git svn fetchgit svn pull 或任何其他我可以尝试从机器 A 上的存储库。我做错了什么?

最佳答案

我认为这是因为默认情况下 git 不会克隆远程分支。使用此命令配置您的克隆

git config --add remote.origin.fetch '+refs/remotes/*:refs/remotes/*'

在执行初始 git fetch 以克隆原始存储库之前。 See the docs有关详细信息(搜索上面的字符串以找到解释)。

另请阅读“警告”部分。 Subversion 不是 git,并且有一些您必须了解的重要差异,否则您破坏您的 git 或您的 svn 存储库。

关于svn - 克隆一个 git-from-svn 存储库并获取所有远程分支,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2546432/

相关文章:

svn - 如何在 Subversion 中 move/重命名包含 @ 字符的文件

svn - TortoiseSVN Diff With "specific file"不会消失

git - 如何在 git 交互式 rebase 中将提交与下一个提交 merge ?

git - git 是否将差异信息存储在提交对象中?

version-control - 你如何在 mercurial 中找到两个标签之间的变更集?

svn - 版本。 "Is not a working copy"

javascript - '无法读取未定义的属性 'data'' nodeJS

git - 如何在 Gitolite 配置中为存储库添加描述

当 merge A->B 然后 B->A 时,Git 不会产生新的提交,我如何确保其他团队看到第二次 merge ?

git - 已签名的 powershell 脚本未在源代码管理后签名