跳转至

07. Packfile 与远端同步

Packfile 和远端同步是高级阶段目标,但最终必须实现,因为它们决定 .pygit 是否具备完整分布式版本控制能力。

pack 文件

.pack 文件必须包含:

  • 4 字节魔数 PACK
  • 4 字节版本号,目标为 version 2。
  • 4 字节对象数量。
  • 连续对象实体。
  • 文件尾部 SHA-1 校验。

idx 文件

.idx Version 2 必须包含:

  • 魔数与版本。
  • 256 项 fan-out table。
  • 按 SHA-1 升序排列的对象名。
  • CRC32 表。
  • offset 表。
  • pack checksum。
  • idx checksum。

pygit 专用服务器边界

项目不实现 GitHub、SSH Git、HTTP Git、git-upload-packgit-receive-pack 官方 wire protocol。自建服务器目标是 .pygit 专用服务器,使用 Python 标准库 socket 提供 refs、fetch、push 和非快进拒绝。

本地路径远端和 pygit://host:port 专用服务器必须可用于项目自身的分布式同步。官方 Git 服务器兼容不是本项目目标。

fetch

fetch 需要完成远端引用发现、对象接收和远端追踪分支更新。对于本地路径远端,允许直接复制对象数据库;对于 pygit 专用服务器,必须通过 socket 请求获取 refs 和对象负载。

push

push 需要完成远端引用发现、非快进拒绝、对象发送和远端引用更新。对于 pygit 专用服务器,服务端必须验证旧引用,拒绝非快进更新。

clone

clone 是 init、配置 origin、fetchcheckout 的组合工作流,必须支持本地路径远端和 pygit 专用服务器。