SVN到Git的迁移提交历史问题

时间:2018-08-24 11:37:13

标签: git svn version-control tortoisesvn git-svn

我的SVN存储库结构不良。让我试着给你张照片。

svn-repo
|
|--branches
|     |
|     |-- project1
|     |-- project2
|     |-- tragetProject
|               |
|               |-- targetProject5.0.0
|               |-- targetProject5.0.1
|               |-- targetProject5.0.2
|               |-- ...
|
|--trunk
      |
      |-- project1
      |-- project2
      |-- ...

我要迁移的项目是“ targetProject”。每个分支派生自最新分支,例如。 5.0.1是5.0.0的分支。因此,svn中的每个分支都具有其祖先的提交历史记录。

这是我尝试迁移到git的过程。

git svn init [trargetProject5.0.2 Url]
git svn fetch

我的问题是,尽管svn分支具有所有提交历史记录,但在获取后,在git local master中只有该分支的提交历史记录,而没有它的祖先。

我需要获取所有历史记录。我尝试更改git config中的git分支URL,以获取每个分支的提交,但这也失败了,因为“ git svn rebase”无法按预期工作。我还需要获取在svn repo中创建的新分支的新提交。有人可以帮忙还是提供一种新的方式来解决这个问题?谢谢。

2 个答案:

答案 0 :(得分:1)

要在保留所有历史记录的同时将SVN迁移到Git,可以使用以下命令:

git svn clone <svn-repo URL> --branches=branches --tags=tags --trunk=trunk

现在所有提交历史都保存在git repo中。默认情况下,只有本地分支master,但是您可以通过git branch -r找到其他分支。

git branch -r命令的输出类似于origin/branch1。然后,您只需要通过git branch -b <local Branch name> <remote branchname>在本地检出所有分支即可。

如上例所示,要在本地检出branch1,可以使用命令git checkout -b branch1 origin/branch1

答案 1 :(得分:1)

好,我找到了解决方法。

我不想克隆我的大型仓库的主干,而是想克隆某个分支。因此,使用此命令即可达到目的。

git svn clone -T branches/tragetProject/tragetProject5.0.2 http://example.com/PROJECT

这将克隆当前分支,并在每个父级中搜索所有提交历史记录。

因为我的svn存储库很大,并且所有分支都链接在一起,所以此命令将花费很多时间才能完成,并且会从旧有分支中获取不需要的提交。通过在末尾添加-r<revision>:HEAD,可以将克隆调查限制为特定的修订版本。

因此命令变为:

git svn clone -T branches/tragetProject/tragetProject5.0.2 http://example.com/PROJECT -r40000:HEAD

希望这对以后的人有帮助。

  

ref https://gist.github.com/trodrigues/1023167#file-gistfile1-txt-L30