Pygit 服务端¶
这个项目支持一个自建的 .pygit 专用服务端,对应远端 URL 形式:
pygit://host:port
这件事要特别说清楚:
它不是官方 git daemon,也不是官方 Git wire protocol 的完整复现。
为什么要做自建服务端¶
项目的目标之一,是让仓库不只在本地单机上转,还能:
- clone;
- fetch;
- push;
- 在两端之间传输对象和 refs。
如果完全不做服务端,项目对“分布式 Git”这一部分的教学会不完整。
但如果一上来就追官方所有网络协议,复杂度又会急剧爆炸。
所以做一个 专用、可控、可教学的 pygit 服务端 是合理取舍。
这个服务端解决什么问题¶
它主要解决:
- 两端如何发现对象差异;
- 如何传输 pack 数据;
- 如何更新远端 refs;
- 如何让本地与远端形成真正的同步闭环。
这意味着项目已经不只是“本地版本控制练习”,而是开始真正处理分布式仓库同步。
为什么不直接宣称自己实现了官方 Git 远端¶
因为那样不诚实。
官方 Git 的网络协议、生态兼容性、托管平台适配都比一个教学型项目复杂得多。
这个项目明确边界:
- 支持本地路径远端;
- 支持自建
.pygit专用 TCP 服务端; - 不声称支持 GitHub、SSH Git、HTTP Git 或官方 Git wire protocol。
这种边界表达方式更干净,也更适合后续维护。
这部分的教学价值¶
即使不是官方协议,这一层依然很有价值。
因为读者仍然能学到:
- 远端同步的最小闭环长什么样;
- clone / fetch / push 依赖哪些核心信息;
- pack 在传输中扮演什么角色;
- ref 更新为什么需要非快进保护;
- 一个“够用、清楚、可讲解”的远端协议应该怎么设计。
对于教学项目来说,这已经是非常实在的收获了。