GITPROTOCOL-COMMON(5) Git Manual GITPROTOCOL-COMMON(5) نام (NAME) gitprotocol-common - موارد مشترک میان پروتکل‌های گوناگون انتقال گیت خلاصه (SYNOPSIS) توضیحات (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/" یک refname رشته‌ای سلسله‌مراتبی از بایت‌ها (octet string) است که با "refs/" آغاز می‌شود و قواعد اعتبارسنجی دستور git-check-ref-format را نقض نمی‌کند. به طور دقیق‌تر: 1. می‌تواند شامل اسلش / برای گروه‌بندی سلسله‌مراتبی (دایرکتوری) باشد، اما هیچ بخشی که با اسلش جدا شده است نمی‌تواند با نقطه آغاز شود .. 2. باید حداقل شامل یک / باشد. این امر وجود یک دسته‌بندی مانند heads/، tags/ و غیره را الزامی می‌کند، اما نام‌های واقعی محدودیتی ندارند. 3. نمی‌تواند شامل دو نقطه پیاپی . در هیچ کجای خود باشد. 4. نمی‌تواند کاراکترهای کنترلی ASCII (یعنی بایت‌هایی با مقدار کمتر از \040 یا \177 DEL)، فاصله، مدک ~، هشتک ^، دو نقطه :، علامت سوال ?، ستاره *، یا قلاب باز [ را در هیچ کجای خود داشته باشد. 5. نمی‌تواند با اسلش / یا نقطه . پایان یابد. 6. نمی‌تواند با توالی .lock پایان یابد. 7. نمی‌تواند شامل توالی @{ باشد. 8. نمی‌تواند شامل \\ باشد. قالب 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) Git 2.55.0 2026-06-29 GITPROTOCOL-COMMON(5)