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

时间:2010-03-30 15:23:26

标签: 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上创建一个跟踪其中一个远程,最初来自svn分支的分支......也不会{{1} },git svn fetch或其他任何我可以尝试从机器A上的存储库中提取远程分支和标记。我做错了什么?

2 个答案:

答案 0 :(得分:5)

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

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

在执行初始git fetch之前克隆原始仓库。 See the docs了解详细信息(搜索上面的字符串以查找说明)。

另请阅读“CAVEAT”部分。 Subversion不是git,你必须了解一些重要的差异,否则 会破坏你的git或你的svn repo。

答案 1 :(得分:4)

我想对this answer发表评论,但我还不允许,所以我必须发布一个新的。

请注意,在克隆svn遥控器之后,你必须在本地初始化它们,这在文档中有描述。但是,引用文档:

  

请务必使用与服务器上使用的相同的URL和-T/-b/-t选项。

git config -l | grep remote将列出主机存储库上所有远程(url,分支,忽略等)的所有配置。输出类似于:

svn-remote.svn/bbpress.url=http://svn.automattic.com/bbpress/trunk
svn-remote.svn/bbpress.fetch=:refs/remotes/svn/bbpress

然后将其添加到.gitignore(使用#发表评论并用空格替换=)以供将来参考。克隆后使用git config --add使用此信息,您将获得这些遥控器的确切副本。