使用git svn迁移SVN到Git时遇update-ref错误及文件缺失问题求助
解决git svn迁移C++ lib仓库时的两类报错问题
先清理本地git-svn缓存与检查环境
- 删除本地git-svn状态缓存:进入迁移的
lib目录,删除.git/svn文件夹(操作前建议备份该目录),这个目录存储git-svn的同步状态,一旦损坏会导致持续的文件不存在类报错。 - 升级Git版本:旧版Git for Windows的git-svn组件可能存在兼容性bug,运行
git --version和git svn --version确认版本,若版本较老,直接升级到最新稳定版。
修复update-ref报错127
- 手动创建缺失的远程引用:报错中提到的
refs/remotes/origin/trunk引用可能未正确生成。进入.git/refs/remotes目录,若origin文件夹不存在则创建,然后在origin内新建trunk文件,将报错中的哈希值22c8704953ab8e4fd22b99fa2ce7f65b49d5427d写入该文件。 - 手动执行update-ref命令:在项目根目录运行以下命令完成引用更新,之后再尝试
git svn fetch:git update-ref -m r40894 refs/remotes/origin/trunk 22c8704953ab8e4fd22b99fa2ce7f65b49d5427d
针对C++ lib项目的特殊排查
- 检查SVN目标版本的文件合法性:报错指向git-svn的文件打开失败,大概率是SVN版本40894中存在Windows不支持的文件(比如路径过长超过260字符、包含
:/*/?等非法字符)。用SVN客户端单独checkout版本40894的trunk,排查这类文件,在SVN端重命名或修改后再继续迁移。 - 分段迁移降低同步压力:避免一次性同步大版本区间,改成小分段执行:
git svn fetch -r3328:4000 git svn fetch -r4001:5000 # 依次推进直到HEAD
极端情况的重新初始化
如果上述操作无效,重新创建一个迁移目录,用分段克隆的方式启动迁移:
git svn clone -r3328:4000 https://svnserver/OurSystems/lib --no-metadata --no-minimize-url --authors-file=authors-lib.txt --stdlayout lib-new cd lib-new git svn fetch -r4001:5000 # 逐步完成后续版本同步
内容的提问来源于stack exchange,提问作者pixel
相关产品推荐
相关产品推荐

