git svn逐步获取旧历史

2017年9月8日

git svn克隆时可选择从svn的哪次提交开始克隆。如果svn仓库很大,git svn克隆就很慢。我们一般都会获取最近的svn历史,然后就开始工作。那么能不能在闲暇时间继续获取更久远的历史呢?本文提供一些方法。

方法一:变基

git svn先克隆最近的历史,如-r 29999:30010,假设30010为HEAD。设这个仓库为新仓库。

git svn克隆旧历史,如-r 20000:29998。设这个仓库为旧仓库。

当新仓库想要旧历史时,创建一个分支备份当前历史,新仓库开启后台服务进程,在旧仓库添加一个远端为新仓库,从中获取。

现在旧仓库有两个分支,分支A有r29999:30000,分支B有r20000:29998。这两个分支的第一个提交包含了那个版本的所有文件。

现在把分支A变基到分支B。处理r29999时会有冲突,选择采取分支A。其他后续提交的处理非常快。

现在分支A就有r20000:30010。

最后可以删除新仓库,因为旧仓库已经获得了旧历史。如果想要获取更多的旧历史,就再创建一个仓库按此法操作。

这个方法的缺点是,变基一定会产生不同的SHA1,因为SHA1不仅跟文件内容有关,还跟来源有关。

方法二:替换

Pro Git介绍到,可以使用git replace命令。