使用reposurgeon将svn存储库转换为git

10

我正在尝试使用 reposurgeon 将一个 SVN 存储库转换为 Git。

以下是我所做的(有一个包含 SVN 名称 -> Git 名称映射的 repo.map 文件):


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就只是停在这里了。我不确定该从哪里寻找解决方案,因为它实际上从未给我错误消息。欢迎提供任何建议。

目前reposurgeon似乎卡住了,作者不知道如何解决这个问题,因为没有收到任何错误信息。如果您有任何建议,请随时提出。


你应该尝试在像 IRC 这样的地方询问 ESR 经常出没。他最近引入了一些性能优化,可能会对你有所帮助。 - mikewaters
@DanielJacobs:你尝试过交互式运行作业吗?我注意到在命令行和脚本中运行程序之间存在微小的差异。我也使用交互式提示符来开发我的Lift脚本。 - 0xC0000022L
2个回答

6
它成功导入了存储库,但然后它会处理“作者读取”命令,但您没有指定文件。此时实际上正在等待stdin上出现的文件。使用“authors read <author-map”,其中author-map是包含映射的文件的名称。 您还需要更改写入命令为“write >repo.fi”,原因类似。

我如何获取这样的作者地图? - rubo77
作者映射(author-map)只是一个文本文件,您可以创建包含类似于“ferd = Ferd J. Foonly foonly@foo.com -0500”这样的行。 - db48x

3
如果你不想使用reposurgeon和git-svn,可以考虑使用SubGit。请访问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 倍,因此原始仓库的转换可能比基于转储的转换更快。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接