svn2git migration:分析代码树的结构

时间:2015-07-28 12:53:25

标签: git svn migration branch analysis

我试图将SVN存储库转换为git。 该存储库包含大约17000次提交,所以我使用的是KDE' svn2git(又名svn-all-fast-export)。

我的问题是存储库已经重新构建了几次(首先它是从CVS转换而来的; vendor - 已经重命名了分支,...)

项目需要一段时间才能切换到/trunk/branches& /tag布局,但是项目有大量的子模块,它们是有组织的。例如。

/trunk/plugins/foo
/trunk/plugins/bar
/branches/plugins/foo/1.0
/branches/plugins/foo/1.1
/branches/plugins/bar/1.0
/tags/plugins/pizzapack/3.14/foo
/tags/plugins/pizzapack/3.14/foo

对于coruse,所有这些子模块也包含子目录树。

/ tags / branches 中的目录结构可能会随着时间的推移而发生变化,但肯定不是很一致。

现在好消息是,svn2git允许我处理所有这些。

坏消息是,在我开始指导svn2git之前,我需要对目录/分支结构的演变进行概述。

所以我正在寻找一种方法来分析文件系统布局随时间的结构变化:添加,删除,复制和移动目录

我目前正在考虑构建一个小帮手工具,让我这样做,但我已经坚持正确跟踪仅限目录的更改。 不要谈论对变化的正确表述,这将使我能够轻松理解发生的事情。

你有什么想法,在处理这样一个项目时你在用什么?

1 个答案:

答案 0 :(得分:1)

您可以尝试使用版本为3.0.0或更高版本的SubGit来检测您的存储库结构。

$ subgit configure --svn-url <projectURL> --layout auto --trunk trunk repo.git

其中--trunk选项指定从最新版本中扮演主干角色的目录的相对路径(没有前导或尾部斜杠,例如--trunk path/to/trunk--trunk trunk;如果在您的存储库的最新版本具有经典的主干/分支/标签结构,它应该只是--trunk trunk)。 此命令将扫描存储库历史记录,跟踪指定的trunk目录的所有移动,复制和重命名,并生成repo.git目录,其中包含subgit/config文件,反映了trunk / branches / tags / shelf选项中的存储库结构。请注意,该命令不会自动检测仅使用“svn add”而不是“svn cp”/“svn mv”添加错误的分支。

然后,您可以使用SubGit开始翻译:

$ subgit install repo.git

或者您可以尝试将生成的trunk / branches / tags选项复制并粘贴到您的git-svn / svn2git配置文件中。我不确定第二种方法是否适用于100%的情况,但对于或多或少的简单存储库结构,这将起作用,因为生成的选项具有与相应的git-svn选项相同的格式。

免责声明:我是SubGit开发人员之一。 SubGit是一种商业工具,但它可以免费进行一次性转换(导入)。