Spec-Zone.ru › Git

gitprotocol-common

Имя

gitprotocol-common - Общие вещи для различных протоколов

Синопсис

<over-the-wire-protocol>

Описание

В данном документе определяются общие для различных протоколов и форматов файлов, используемых в Git, вещи.

Нотация ABNF

В документации по протоколам используется нотация ABNF, как описано в RFC 5234, за исключением следующих заменённых основных правил:

  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. Должны содержать по меньшей мере одну /. Это обеспечивает наличие категории, такой как tags/, heads/ и т. д., но фактические имена не ограничены.

  3. Не могут иметь две точки подряд .. нигде.

  4. Не могут содержать управляющих символов ASCII (т. е. байты с значениями ниже \040 или \177 DEL), пробел, тильду ~, обратную косую черту ^, двоеточие :, знак вопроса ?, звездочку *, или открытую квадратную скобку [ нигде.

  5. Не могут заканчиваться косой чертой / или точкой ..

  6. Не могут заканчиваться последовательностью .lock.

  7. Не могут содержать последовательность @{.

  8. Не могут содержать \\.

Формат pkt-строки

Большая (но не вся) часть полезной нагрузки описывается с помощью pkt-строк.

Pkt-строка — это двоичная строка переменной длины. Первые четыре байта строки, pkt-len, указывают полную длину строки в шестнадцатеричном формате. pkt-len включает 4 байта, используемые для хранения шестнадцатеричного представления длины.

Pkt-строка МОЖЕТ содержать двоичные данные, поэтому разработчики ДОЛЖНЫ убедиться, что процедуры разбора/формирования pkt-строк работают с 8-битными данными.

Недвоичная строка ДОЛЖНА завершаться символом LF, который, если присутствует, ДОЛЖЕН быть включён в общую длину. Приёмники ДОЛЖНЫ обрабатывать pkt-строки с недвоичными данными одинаково независимо от того, содержат ли они заключительный LF (удаляя LF, если он присутствует, и не жалуясь, если его нет).

Максимальная длина компонента данных pkt-строки составляет 65516 байт. Реализации НЕ ДОЛЖНЫ отправлять pkt-строки, длина которых превышает 65520 (65516 байт полезной нагрузки + 4 байта данных длины).

Реализации НЕ ДОЛЖНЫ отправлять пустую pkt-строку ("0004").

Pkt-строка с полем длины 0 ("0000"), называемая flush-pkt, является особым случаем и ДОЛЖНА обрабатываться иначе, чем пустая pkt-строка ("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"            ""

gitprotocol-common

© 2005–2026 Linus Torvalds and others
Licensed under the GNU General Public License version 2.
https://git-scm.com/docs/gitprotocol-common

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API