使用 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如果您考虑替代 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的主要内容,如果未能解决你的问题,请参考以下文章