Git fast-import使用from命令报错:Unsupported command问题排查
解决cvs-fast-export增量导入git fast-import的问题
1. 修复from命令的语法错误
refs/heads/master^0这种写法不被git fast-import支持,别用这种格式。正确的from命令得用完整的提交哈希或者标记引用:
- 用提交哈希的话,先获取上次导入后master分支的最新哈希:
git rev-parse refs/heads/master,然后把流里的错误行改成:from <获取到的哈希值> - 如果用标记文件的话,直接写
from :<标记ID>,标记ID就是第一次导出时记录在marks文件里的对应条目。
2. 用export-marks/import-marks保留SHA的正确流程
你之前用了没生效,大概率是流程不对,按下面步骤来:
- 第一次完整导入时,必须导出标记到文件:
cvs-fast-export [你的CVS仓库参数] | git fast-import --export-marks=cvs-marks.txt - 增量导入时,先导入旧标记,处理流之后再导出更新后的标记:
标记文件会记录每个CVS提交对应的Git提交ID,确保增量导入时,已存在的提交会直接复用之前的SHA值,不会生成新的。cvs-fast-export --incremental [你的增量参数] | git fast-import --import-marks=cvs-marks.txt --export-marks=cvs-marks-new.txt # 替换旧标记文件,下次增量用新的 mv cvs-marks-new.txt cvs-marks.txt
3. 让cvs-fast-export生成正确的增量流
别手动加from命令,用好cvs-fast-export的增量参数。你需要告诉工具从上次导入的CVS版本开始导出,用-r指定起始标签或修订号:
cvs-fast-export --incremental -r 上次导入的CVS标签 [你的CVS仓库路径]
这样工具生成的流会自动关联到之前的Git提交,不用手动修改from命令,避免出错。
4. 导入后验证结果
导入完成后,检查下是否符合预期:
- 查看master分支的提交历史:
git log --oneline refs/heads/master,确认增量提交是追加在旧提交之后的 - 对比SHA值:用
git rev-parse refs/heads/master@{1}查看上次导入后的master HEAD,和当前HEAD对比,确保旧提交的SHA没有变化,增量部分正确关联
内容的提问来源于stack exchange,提问作者J. Hein
相关产品推荐
相关产品推荐

