问题
默认情况下, 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
答案 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)