跳转至

实现 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 没地方放;
  • 测试很难隔离问题。

所以真正严肃的实现一定要回到模块边界。

怎么读这一部分

建议按这个顺序读:

  1. 架构
  2. 对象数据库
  3. Index V2
  4. Refs
  5. 合并引擎
  6. Pygit 服务端

这样顺序和实现依赖关系比较接近:先理解整体骨架,再逐层往下。