| GITPROTOCOL-COMMON(5) | Git Manual | GITPROTOCOL-COMMON(5) |
نام (NAME)
gitprotocol-common - موارد مشترک میان پروتکلهای گوناگون انتقال گیت
خلاصه (SYNOPSIS)
<over-the-wire-protocol>
توضیحات (DESCRIPTION)
این سند موارد مشترک میان پروتکلهای گوناگون انتقال بر بستر شبکه (over-the-wire) و قالبهای فایل مورد استفاده در گیت را تعریف میکند.
نشانهگذاری ABNF (ABNF NOTATION)
از نشانهگذاری 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 رشتهای سلسلهمراتبی از بایتها (octet string) است که با "refs/" آغاز میشود و قواعد اعتبارسنجی دستور git-check-ref-format را نقض نمیکند. به طور دقیقتر:
قالب PKT-LINE (PKT-LINE FORMAT)
بخش عمدهای از بار داده (payload) پیرامون خطوط بستهای (pkt-line) توصیف میشود.
یک pkt-line یک رشته باینری با طول متغیر است. چهار بایت نخست خط، یعنی pkt-len، طول کل خط را در مبنای شانزده نشان میدهد. مقدار pkt-len خود شامل این ۴ بایت که برای نمایش هگزادسیمال طول استفاده شدهاند نیز میشود.
یک pkt-line میتواند شامل دادههای باینری باشد، بنابراین پیادهسازان باید اطمینان حاصل کنند که روالهای تجزیه و قالببندی pkt-line به صورت 8-bit clean عمل میکنند.
یک خط غیرباینری باید با یک LF خاتمه یابد، که در صورت وجود باید در طول کل محاسبه شود. گیرندهها باید با pkt-lineهای حاوی دادههای غیرباینری به طور یکسان رفتار کنند چه شامل LF پایانی باشند و چه نباشند (حذف LF در صورت وجود، و بدون اشکالگیری در صورت عدم وجود آن).
بیشینه طول بخش دادههای یک pkt-line برابر با ۶۵۵۱۶ بایت است. پیادهسازیها نباید pkt-lineهایی ارسال کنند که طول آنها از ۶۵۵۲۰ تجاوز کند (۶۵۵۱۶ بایت بار داده + ۴ بایت دادههای طول).
پیادهسازیها نباید یک pkt-line خالی ("0004") ارسال کنند.
یک pkt-line با فیلد طول 0 ("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)
| 2026-06-29 | Git 2.55.0 |