如何将git-svn代码库迁移至新设备?同步异常求高效方案
高效迁移Git-SVN仓库至新设备的解决方案
我之前也处理过类似超大规模(70000+提交)的Git-SVN迁移场景,给你几个比从头克隆高效得多的方案,完全不用等3天:
方案1:直接迁移原设备的完整仓库目录(最推荐)
Git-SVN的所有SVN追踪元数据(包括最后同步的版本号、服务器URL、凭证缓存等)都存在仓库的.git/svn目录里,只要把**整个项目文件夹(包括隐藏的.git目录)**完整复制到新设备,就能直接使用:
- 操作步骤:在原设备把项目文件夹打包(比如用zip或tar),拷贝到新笔记本解压,打开终端进入文件夹,直接执行
git svn rebase就能正常同步最新提交,完全不会从头拉取7万+历史。 - 优势:零等待,直接复用原仓库的所有同步状态,是最快的方式。
方案2:提取原仓库的同步版本号,增量初始化新仓库
如果没法直接复制原仓库(比如原设备已退役),可以先从原仓库拿到最后同步的SVN版本号,然后在新设备上只克隆从该版本开始的内容:
- 在原设备上执行以下命令,获取最后同步的SVN版本:
会得到类似git svn info | grep RevisionRevision: 74890的结果,记下来这个版本号。 - 在新设备上执行克隆命令,指定从该版本开始拉取:
# 如果是标准trunk/branches/tags结构,加上--stdlayout git svn clone --stdlayout -r74890:HEAD [你的SVN服务器URL] # 如果是单一分支仓库,直接用: git svn clone -r74890:HEAD [你的SVN服务器URL] - 克隆完成后,执行
git svn rebase就能同步后续的新提交,整个过程只需要拉取版本74890之后的内容,速度会快很多。
方案3:排查并修复git svn rebase挂起的问题
如果新设备已经初始化了仓库但rebase挂起,先排查原因:
- 测试网络连通性:执行
svn info [你的SVN服务器URL],看看能不能正常返回信息,如果超时说明网络有问题,检查新设备的网络设置或SVN服务器的访问权限。 - 清理Git-SVN缓存:进入新仓库的
.git/svn目录,删除所有缓存文件(比如refs/remotes/git-svn/.rev_map.*),然后执行增量fetch:
完成后再执行git svn fetch -r[原仓库最后同步的版本号]:HEADgit svn rebase就应该能正常工作了。
内容的提问来源于stack exchange,提问作者rath




