我有一个 svn 树,我想把它变成多个独立的 git 存储库。这种迁移的一个方面是,作为 subversion 树中的跨模块符号链接的 inode 应该被 git 存储库中的实际文件内容替换。因此,如果在某些时候,A/foo
是 的符号链接B/foo
,那么相应的 git commit 应该有一个普通文件A/foo
,其内容是B/foo
. 如果后来的 svn commit 改变了 的内容B/foo
,那么 git 模块A
应该有一个匹配的提交来反映这个变化。
我可以为此使用哪些工具?
现在,这是我能想到的最好的计划:
- 将整个svn克隆到git中
fast-export
那- 使用一些自定义编写的一次性代码对输出进行按摩,以将符号链接转换为内容文件
fast-import
结果进入一个新的单一 git 存储库- 从中创建子模块
但也许您可以提出更简单的解决方案,使用现有代码、现有功能、现有工具,或者使用我没有想到的快捷方式。
也许甚至有一种方法可以在颠覆方面处理更多这些步骤。由于我大量使用创建文件的颠覆副本,并且由于该概念只能在 git 概念中表达得很差,因此我担心上述方法可能会由于复制文件而丢失版本历史。