问题 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

12773
2018-03-01 17:53


起源

你试过-T标志吗? git svn clone -T repo_url?
@Kata,我不是你提到的 -s 旗?标准布局。它采用标准的trunk / branches / tags目录格式,因此它从SVN存储库导入所有分支和标记。我发现了 jonmaddox.com/2008/03/05/... 对迁移特别有用。 - mgarciaisaia


答案:


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

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

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

如果您将一个分支的URL传递给 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)


10
2018-03-02 01:31



如果将多个单个分支指定为多个 svn-remote.{name}.fetch 配置选项(您需要在运行之间手动执行此操作 git svn init 和第一个 git svn fetch,没有`git svn clone short-cut here),你可以获取一些特定的分支,包括它们之间的分支历史。 - me_and


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


1
2018-03-02 12:09