Git
英文 ▾ 主題 ▾ 最新版本 ▾ gitprotocol-common 最後更新於 2.43.0

名稱

gitprotocol-common - 各種協定通用的項目

概要

<over-the-wire-protocol>

描述

此文件定義了 Git 中各種有線協定和檔案格式通用的項目。

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 命令驗證規則的分層八位元字串。更具體地說,它們

  1. 它們可以包含斜線 / 用於分層(目錄)分組,但沒有以斜線分隔的元件可以以點 . 開頭。

  2. 它們必須至少包含一個 /。這會強制存在一個類別,如 heads/tags/ 等,但實際名稱不受限制。

  3. 它們的任何位置都不能有兩個連續的點 ..

  4. 它們不能有 ASCII 控制字元(即數值低於 \040 或 \177 DEL 的位元組)、空格、波浪號 ~、插入符號 ^、冒號 :、問號 ?、星號 * 或左方括號 [

  5. 它們不能以斜線 / 或點 . 結尾。

  6. 它們不能以序列 .lock 結尾。

  7. 它們不能包含序列 @{

  8. 它們不能包含 \\

pkt-line 格式

大部分(但不是全部)的酬載都是圍繞 pkt-line 描述的。

pkt-line 是一個可變長度的二進制字串。該行的前四個位元組 pkt-len 以十六進位表示,指出該行的總長度。pkt-len 包含用於包含長度十六進位表示的 4 個位元組。

pkt-line 可以包含二進制資料,因此實作者必須確保 pkt-line 解析/格式化常式是 8 位元清除的。

非二進制行應該以 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"            ""

GIT

屬於 git[1] 套件的一部分

scroll-to-top