Git-svn - 导入完整的历史记录

时间:2013-03-01 17:53:50

标签: git svn git-svn

问题

默认情况下, git svn clone 仅从分支创建开始导入历史记录,尽管事实上,文件的历史记录在创建分支之前存在于SVN存储库中。

如果重要的话,我们的SVN分支由svn copy创建。

我的尝试

我已尝试--no-minimize-url--follow-parent,但没有成功。生成的Git存储库与没有这些参数的情况相同,从分支创建开始。

期望的结果

Git存储库,包含SVN存储库创建的完整历史记录。

更新

我的实际命令行是

git svn clone http://svnserver/repo/dir1/dir2/project

结果命令的-T参数有什么帮助:

git svn clone http://svnserver/repo/ -T dir1/dir2/project

2 个答案:

答案 0 :(得分:10)

  

默认情况下,git svn clone仅从分支创建中导入历史记录   尽管事实上,文件的历史记录存在于svn中   存储库先前的分支创建。

是。那是真实的。如果被告知,git svn将仅尝试将分支导入为分支。来自git-svn的联机帮助页:

  

克隆SVN存储库时,如果没有用于描述的选项   使用存储库布局(--trunk, - tags, - branch,   --stdlayout),git svn clone将创建一个具有完全线性历史记录的git存储库,其中分支和标记显示为单独的   工作副本中的目录。

如果您将一个分支的网址传递给git svn clone(而不是顶级网址),那么您只会获得该分支的线性历史记录。这可能就是你所看到的。

如果您想要完整历史记录,请使用上面提到的存储库布局选项,并传递顶级URL。然后git svn将尝试为SVN分支创建git分支,并尝试为它们提供正确的历史记录,在创建之前返回。

请注意,这将为您提供包含所有分支的完整存储库。如果您只想要一些分支,则需要按照联机帮助页中的说明修改配置:

  

也可以使用a来获取分支或标记的子集   以逗号分隔的大括号内的名称列表。例如:

       [svn-remote "huge-project"]
               url = http://server.org/svn
               fetch = trunk/src:refs/remotes/trunk
               branches = branches/{red,green}/src:refs/remotes/branches/*
               tags = tags/{1.0,2.0}/src:refs/remotes/tags/*

请参阅git-svn(1)

答案 1 :(得分:1)

http://git-scm.com/book/en/Git-and-Other-Systems-Migrating-to-Git介绍了如何正确导入分支和标记。