我一直在使用一个177GB的野兽SVN存储库,我正在尝试将其迁移到git。很明显,有很多文件不需要在那里。
完成所有历史记录(每个存储库需要一段时间)后,我最终需要将其与SVN同步。但是在历史重写之后,修订版不再符合git svn
期望的内容,因此事情就会破裂。
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)
使用 ???
^如何在最后一步不破坏同步? git svn fetch
没有任何用处,因为它将修订(1 +(X - n))拉到(X + k)并在我重新定义后完全破坏了所有内容。
理想情况下,解决方案可以编写脚本,并且在重写历史记录之前不需要知道我所处的修订版本。 (但即便如此......你怎么告诉git修订版(X-n)对应SVN修订版X?)