迁移庞大的SVN仓库。到Git - 如何重写历史并保持同步?

时间:2014-07-16 02:34:59

标签: git svn version-control migration git-svn

问题

我一直在使用一个177GB的野兽SVN存储库,我正在尝试将其迁移到git。很明显,有很多文件不需要在那里。

完成所有历史记录(每个存储库需要一段时间)后,我最终需要将其与SVN同步。但是在历史重写之后,修订版不再符合git svn期望的内容,因此事情就会破裂。

目标

  1. 将所有SVN历史记录复制到git
  2. 从git中的存储库中删除垃圾(比在SVN中更容易)
  3. 冻结SVN代码库
  4. 让SVN为只读
  5. 自迁移开始以来将任何提交应用于git存储库
  6. 将最终的SVN提交推送到git
  7. 合并存储库,迁移后清理等......
  8. 快乐
  9. 步骤(简化)

    • SVN存储库A在修订版X中迁移到Git

      git svn clone <args>
      
    • A中的大对象将从git历史记录中删除

      git filter-branch --force --index-filter                       \
              'git rm -r --cached --ignore-unmatch some/fat/badness' \
              --prune-empty --tag-name-filter cat -- --all
      
    • 推送这些更改 - 使用重写的历史记录,我们现在处于修订版X - n

      git push -u origin --all --force
      git push --tags --force
      

      ...开发人员向svn提交内容;现在在修订版(X + k)

    • 使用 ???

    • 与SVN同步

    ^如何在最后一步不破坏同步? git svn fetch没有任何用处,因为它将修订(1 +(X - n))拉到(X + k)并在我重新定义后完全破坏了所有内容。

    理想情况下,解决方案可以编写脚本,并且在重写历史记录之前不需要知道我所处的修订版本。 (但即便如此......你怎么告诉git修订版(X-n)对应SVN修订版X?)

    参考

0 个答案:

没有答案