09. 实现路线¶
虽然最终目标是复现 Git 全部核心功能,但实现必须分阶段推进,避免一开始把对象库、合并、packfile 和远端协议混在一起导致不可验证。
MVP:本地对象与提交闭环¶
inithash-objectcat-file- loose object 读写和校验
- Git Index V2 基础读写
addwrite-treecommit-treecommitlog
完成 MVP 后,项目必须能从空仓库创建提交,并能查看提交历史。
V1:本地工作流完整化¶
statusrmbranchcheckoutswitchtagreset- ignore 规则基础支持
完成 V1 后,项目应具备单机 Git 常用工作流。
V2:合并与冲突¶
- commit DAG 遍历。
- LCA 查找。
- fast-forward merge。
- 三方合并。
- 冲突文件标记。
- index stage 1/2/3。
- 禁止未解决冲突提交。
完成 V2 后,项目应支持多分支并行开发。
V3:stash 与高级状态管理¶
stash pushstash applystash pop- stash commit 结构。
- stash 与工作区/index 的恢复逻辑。
V4:Packfile¶
- pack v2 读取。
- idx v2 读取。
- pack 随机对象定位。
- pack 生成。
- delta 对象解析和生成。
V5:远端同步¶
clonefetchpush- 远端引用协商。
- want/have 对象协商。
- 非快进拒绝。
- pack 网络传输。
验收原则¶
每个阶段都必须配套测试,并尽量使用官方 Git 对生成数据进行交叉验证。凡是生成的对象、index、ref、packfile 不能被 Git 识别的情况,都必须作为兼容性缺陷处理。