10

我正在尝试使用reposurgeon将 svn repo 转换为 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 只是坐着。目前我不确定在哪里寻找解决方案,因为它实际上从未给我一条错误消息。任何建议都非常受欢迎。

4

2 回答 2

6

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

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

于 2013-05-13T23:34:03.877 回答
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 风格的属性转换为它们的 Git 模拟。

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

于 2012-12-26T15:27:56.323 回答