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. Более конкретно, они:
-
Могут включать косые черты
/для иерархической (каталожной) группировки, но ни один компонент, разделённый косой чертой, не может начинаться с точки.. -
Должны содержать по меньшей мере одну
/. Это обеспечивает наличие категории, такой какtags/,heads/и т. д., но фактические имена не ограничены. -
Не могут иметь две точки подряд
..нигде. -
Не могут содержать управляющих символов ASCII (т. е. байты с значениями ниже \040 или \177
DEL), пробел, тильду~, обратную косую черту^, двоеточие:, знак вопроса?, звездочку*, или открытую квадратную скобку[нигде. -
Не могут заканчиваться косой чертой
/или точкой.. -
Не могут заканчиваться последовательностью
.lock. -
Не могут содержать последовательность
@{. -
Не могут содержать
\\.
Формат 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