13

问题

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

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

我的尝试

我试过--no-minimize-urland --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
4

2 回答 2

10

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

是的。那是真实的。git svn如果被告知,只会尝试将分支作为分支导入。从 git-svn 的手册页:

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

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

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

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

也可以通过在大括号中使用逗号分隔的名称列表来获取分支或标签的子集。例如:

       [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)

于 2013-03-02T01:31:00.197 回答
1

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

于 2013-03-02T12:09:13.990 回答