我很难理解如何从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上的存储库中提取远程分支和标记。我做错了什么?
答案 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
使用此信息,您将获得这些遥控器的确切副本。