SVN到Git迁移提交历史记录问题

SVN到Git迁移提交历史记录问题,git,svn,version-control,tortoisesvn,git-svn,Git,Svn,Version Control,Tortoisesvn,Git Svn,我有一个结构不良的SVN回购。让我试着给你一个图像 svn-repo | |--branches | | | |-- project1 | |-- project2 | |-- tragetProject | | | |-- targetProject5.0.0 | |-- targetProject5.0.1 | |-- targetProject5.

我有一个结构不良的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分支拥有所有提交历史,但在fetch之后,在git local master中只有该分支的提交历史,而不是它的祖先的提交历史


我需要了解所有的历史。我尝试在git config中更改git分支url,以便获取每个分支的提交,但这也失败了,因为“git svn rebase”没有按预期工作。我还需要在svn repo中创建一个新分支的新提交。有谁能帮助我或提供一种新的方法来处理这个问题吗?谢谢。

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

git svn clone <svn-repo URL> --branches=branches --tags=tags --trunk=trunk
git svn clone--branchs=branchs--tags=tags--trunk=trunk
现在,所有提交历史记录都保存在git repo中。默认情况下,只有本地分支
master
,但您可以通过
git branch-r
找到其他分支

并且,
git branch-r
命令的输出类似于
origin/branch1
。然后,您只需要通过
git branch-b
本地签出所有分支


如上例所示,要在本地签出
branch1
,您可以使用命令
git checkout-b branch1 origin/branch1
将SVN迁移到git,同时保留所有历史记录,您可以使用以下命令:

git svn clone <svn-repo URL> --branches=branches --tags=tags --trunk=trunk
git svn clone--branchs=branchs--tags=tags--trunk=trunk
现在,所有提交历史记录都保存在git repo中。默认情况下,只有本地分支
master
,但您可以通过
git branch-r
找到其他分支

并且,
git branch-r
命令的输出类似于
origin/branch1
。然后,您只需要通过
git branch-b
本地签出所有分支


如上面的示例所示,要在本地签出
branch1
,可以使用命令
git checkout-b branch1 origin/branch1
确定我已经找到了解决方案

我想克隆某个分支,而不是克隆我庞大回购协议的主干。所以使用这个命令就可以了

git svn clone -T branches/tragetProject/tragetProject5.0.2 http://example.com/PROJECT
这将克隆当前分支,并在每个父级中搜索所有提交历史记录

因为我的svn repo很大,而且所有分支都链接在一起,所以这个命令需要很长时间才能完成,并且会从遗留分支获取不需要的提交。通过在末尾添加
-r:HEAD
,您可以将克隆调查限制在特定版本

因此,命令变为:

git svn clone -T branches/tragetProject/tragetProject5.0.2 http://example.com/PROJECT -r40000:HEAD
希望这对将来的人有所帮助

参考号


好的,我找到了解决办法

我想克隆某个分支,而不是克隆我庞大回购协议的主干。所以使用这个命令就可以了

git svn clone -T branches/tragetProject/tragetProject5.0.2 http://example.com/PROJECT
这将克隆当前分支,并在每个父级中搜索所有提交历史记录

因为我的svn repo很大,而且所有分支都链接在一起,所以这个命令需要很长时间才能完成,并且会从遗留分支获取不需要的提交。通过在末尾添加
-r:HEAD
,您可以将克隆调查限制在特定版本

因此,命令变为:

git svn clone -T branches/tragetProject/tragetProject5.0.2 http://example.com/PROJECT -r40000:HEAD
希望这对将来的人有所帮助

参考号


谢谢你的回复。。我要试试这个。。但这将克隆每个项目,对吗?我的问题是svn结构不好,包含许多不同的项目,而我要传输的项目位于svn repo中的Branchs文件夹下。另外,我想转移的项目对于每个版本都有一个新的分支。您是否建议克隆整个回购协议,然后创建一个新分支合并我需要的svn分支?@ITDOesNetwork您的意思是只克隆某个分支而不是所有分支,然后您可以在
--branchs
选项中指定它。例如
--branchs=branchs\tragetProject
。感谢您的回复。。我要试试这个。。但这将克隆每个项目,对吗?我的问题是svn结构不好,包含许多不同的项目,而我要传输的项目位于svn repo中的Branchs文件夹下。另外,我想转移的项目对于每个版本都有一个新的分支。您是否建议克隆整个回购协议,然后创建一个新分支合并我需要的svn分支?@ITDOesNetwork您的意思是只克隆某个分支而不是所有分支,然后您可以在
--branchs
选项中指定它。例如
--branchs=branchs\tragetProject