使用 reposurgeon 将 svn repo 转换为 git

Posted

技术标签:

【中文标题】使用 reposurgeon 将 svn repo 转换为 git【英文标题】:converting svn repo to git using reposurgeon 【发布时间】:2012-12-24 04:38:41 【问题描述】:

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

【问题讨论】:

您应该尝试询问 ESR 挂起的地方,例如 IRC。看起来有很多提交,他最近介绍了一些您可能感兴趣的性能优化。 @DanielJacobs:您是否尝试过以交互方式运行作业?我注意到在命令行和脚本中运行的东西之间存在细微的差异。我还使用交互式提示来开发我的电梯脚本。 【参考方案1】:

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

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

【讨论】:

如何获得这样的作者地图? 作者地图只是您创建的一个文本文件,其中包含类似于“ferd = Ferd J. Foonly -0500”的行。【参考方案2】:

如果您考虑替代 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 倍,因此原始存储库的转换可以比基于转储的转换更快。

【讨论】:

以上是关于使用 reposurgeon 将 svn repo 转换为 git的主要内容,如果未能解决你的问题,请参考以下文章

使用 svn repo 自动运行 Travis-ci?

在 svn repo 中删除/移动文件夹对 svn 转储和加载的影响

SVN 加载新存储库

访问脱机SVN存储库

事后有没有办法将svn历史导入git?

XCode 5 不显示 repo 的完整 SVN 历史记录