实现 Git 教学¶
这一部分讨论的不是“Git 是什么”,而是“如果你要自己用 Python 做一个 Git 复现项目,应该怎么拆、怎么组织、怎么验证”。
这一部分和 Git 教学有什么区别¶
Git 教学 更偏向概念层:对象、index、commit、merge、pack。
实现 Git 教学 更偏向工程层:这些概念在代码里应该怎么落地。
也就是说,前者回答:
- Git 为什么这样工作?
后者回答:
- 如果我自己实现,模块应该怎么分?
- 哪些逻辑必须集中?
- 哪些地方最容易出 bug?
- 哪些危险操作必须先做边界保护?
你会学到什么¶
这一部分会重点讲:
- 架构如何拆;
- 对象数据库如何实现;
- Index V2 为什么难;
- refs 和
HEAD怎么做; - merge engine 怎么组织;
- 为什么自建
.pygit服务端不是官方 Git daemon; - 为什么真实测试和安全边界比“能跑通 demo”更重要。
为什么不能只写几个命令文件¶
很多初学者做 Git 复现时,第一反应是:
- 写个
init.py - 写个
add.py - 写个
commit.py
这样入门可以,但随着功能增长,很快就会出问题:
- 对象逻辑复制到多个命令里;
- 路径安全保护散落各处;
- lockfile 行为不统一;
- merge 和 pack 没地方放;
- 测试很难隔离问题。
所以真正严肃的实现一定要回到模块边界。
怎么读这一部分¶
建议按这个顺序读:
架构对象数据库Index V2Refs合并引擎Pygit 服务端
这样顺序和实现依赖关系比较接近:先理解整体骨架,再逐层往下。