使用reposurgeon将svn repo转换为git

时间:2012-12-24 04:38:41

标签: git svn svnadmin

我正在尝试使用reposurgeon将svn repo转换为git。

这是我做的(有一个具有svn名称的repo.map文件 - > git名称映射):

svnadmin dump /home/subversion > repo.svn
reposurgeon "verbose 1" "repo.svn" "authors read" "write repo.fi"

reposurgeon运行了好几个小时(大量交换,因为它是一个12GB的转储文件),一切看起来都不错。这是我得到的输出:

    reposurgeon: verbose 1
    reposurgeon: from repo.svn...copynodes+filemaps+copysets+commits+branches+parents+root+branchlinks+svn-mergeinfo+tagifying+tagify-empty+polishing+canonicalizing+resets+debubbling+renumbering+14163 revisions (1/s)...(9810.18 sec) done.
reposurgeon: r13: deleting parentless zero-op commit.
.
.
.
reposurgeon: r13726: deleting parentless zero-op commit.
    2012-12-24T01:16:23Z * repo.svn

此时reposurgeon就坐了。我不知道在这一点上在哪里寻找解决方案,因为它从来没有给我一个错误信息。任何建议都是最受欢迎的。

3 个答案:

答案 0 :(得分:6)

它已成功导入存储库,但随后它将处理authors read命令,但您没有指定文件。此时它实际上正在等待文件出现在stdin上。使用authors read <author-map,其中author-map是包含地图的文件的名称。

出于类似的原因,您还需要将写入命令更改为write >repo.fi

答案 1 :(得分:3)

如果您考虑使用reposurgeon和git-svn的替代方案,请查看SubGit

$ subgit configure /home/subversion
#edit /home/subversion/conf/subgit.conf to set 'core.authorsFile' option to path to "repo.map" file
$ subgit install /home/subversion
$ subgit uninstall --purge /home/subversion

转换后的存储库位于/home/subversion/.git目录中。作为奖励,你将把所有svn:ignore和svn:eol-style属性转换为他们的Git模拟。

通常,SVN存储库比相应的转储文件紧凑4倍,因此原始存储库的转换速度可能比基于转储的转换速度快。

答案 2 :(得分:-1)

如果您考虑替代reposurgeon,我选择使用git-svn。