有没有办法将提交历史从SVN仓库合并到Git分支?

问题描述:

我们目前有几个小的半相关的SVN回购,只要提交就无效。然而,他们偶尔需要使用和/或他们的提交历史需要审查。我们希望将它们全部移到一个预先存在的Git回购库中,因为我们大部分的工作都是在Git上完成的......有没有办法将提交历史从SVN仓库合并到Git分支?

在做研究时,我认为我想实现的目标是拥有一个Git每个SVN回购的子树分支都具有所有提交历史记录。但是,git-svn似乎只允许我将1个SVN回购与1个Git回购相关联,因此我必须首先为每个项目创建一个git回购,然后转换为最终回购中的子树。 (我认为)

有没有办法从直接的SVN回购历史驶入了分公司,在我的Git仓库,这样我可以跳过有效冗余创建的Git回购的步骤?

+0

git-svn,根据您的标签... – 2013-05-14 17:58:34

因此,我想避免额外存储库的原因是我们使用GitHub来存储我们的存储库,而我需要创建的额外存储库会使我们超出当前计划的限制。

因此,诀窍,我发现,是让所有的仓库的地方。我知道这是一种可能性,但不知道如何引用本地存储库。事实证明,它不会更容易!下面是我所经历的步骤:

对于每个SVN仓库:

git svn clone http://svnhost.com/path/to/svn/repo 

这将创建一个所有从SVN历史(甚至时间戳被保留!)的本地的Git回购。接下来,转到您要将其合并到的回购。创建一个分支,从代码中提取:

git checkout -b newsvnbranch1 
git pull path_to_newsvnbranch1_git_repo 

现在,剩下的步骤是不是原来的问题的一部分,但他们是我需要完成的最终目标 - 所有的SVN回购和历史合并在一起,但在他们自己的目录中。

git mv trunk newname1 
git checkout master 
git merge newsvnbranch1 

完成每个SVN回购这些步骤基本上是离开你原来的Git回购具有以下结构:

original 
|-newname1 (containing the contents of the first SVN repo) 
|-newname2 (containing the contents of the second SVN repo) 
|-newname3 (and so on...) 

而且,git log现在将显示每个交织回购的历史。

一切都在git的更容易。我会使用像git2svn这样的工具将Subversion版本库导入到git中。

一旦git的,你可以在安装有分支的新仓库。您可以设置每个分支来跟踪一个转换的Subversion存储库。一旦你提取了变更集,你可以用git remote remove清除远程追踪。这使您在分支机构中使用来自Subversion的各种变更集的存储库。