设置和配置
获取和创建项目
基本快照
分支与合并
共享和更新项目
检查和比较
打补丁
调试
电子邮件
外部系统
服务器管理
指南
管理
底层命令
- 2.50.1 → 2.55.0 无变更
-
2.50.0
2025-06-16
- 2.43.1 → 2.49.1 无更改
-
2.43.0
2023-11-20
- 2.38.1 → 2.42.4 无更改
-
2.38.0
2022-10-02
ABNF 表示法
协议文档中使用了 RFC 5234 所描述的 ABNF 表示法,但使用了以下替换后的核心规则:
HEXDIG = DIGIT / "a" / "b" / "c" / "d" / "e" / "f"
我们还定义了以下通用规则:
NUL = %x00 zero-id = 40*"0" obj-id = 40*(HEXDIGIT) refname = "HEAD" refname /= "refs/" <see discussion below>
引用名(refname)是一个分层的八位字节字符串,以 "refs/" 开头且不违反 git-check-ref-format 命令的验证规则。更具体地说,它们:
-
它们可以包含斜线
/用于分层(目录)分组,但任何斜线分隔的组件都不能以点.开头。 -
它们必须至少包含一个
/。这强制要求存在诸如heads/、tags/等分类,但实际名称不受限制。 -
它们不能在任何位置包含两个连续的点 ..。
-
它们不能包含任何 ASCII 控制字符(即值小于 \040 或 \177
DEL的字节)、空格、波浪号~、脱字符^、冒号:、问号 ?、星号*或左方括号 [。 -
它们不能以斜线
/或点.结尾。 -
它们不能以序列
.lock结尾。 -
它们不能包含序列
@{。 -
它们不能包含 \\。
pkt-line 格式
大部分(但并非全部)有效负载是围绕 pkt-line 描述的。
pkt-line 是一种可变长度的二进制字符串。该行的前四个字节(pkt-len)以十六进制表示该行的总长度。pkt-len 包含用于存储长度十六进制表示的 4 个字节。
pkt-line 可能包含二进制数据,因此实现者必须确保 pkt-line 的解析/格式化程序是 8 位透明(8-bit clean)的。
非二进制行应该以换行符(LF)结束,如果存在,则必须将其计入总长度。接收方必须以相同的方式处理包含非二进制数据的 pkt-line,无论它们是否包含末尾的 LF(如果存在则去除 LF,缺失时不应报错)。
pkt-line 数据组件的最大长度为 65516 字节。实现不得发送长度超过 65520 的 pkt-line(65516 字节有效负载 + 4 字节长度数据)。
实现不应发送空的 pkt-line("0004")。
长度字段为 0 的 pkt-line("0000"),称为 flush-pkt,是一个特殊情况,必须与空 pkt-line("0004")区别处理。
pkt-line = data-pkt / flush-pkt data-pkt = pkt-len pkt-payload pkt-len = 4*(HEXDIG) pkt-payload = (pkt-len - 4)*(OCTET) flush-pkt = "0000"
示例(以 C 风格字符串表示):
pkt-line actual value --------------------------------- "0006a\n" "a\n" "0005a" "a" "000bfoobar\n" "foobar\n" "0004" ""