'\" t .\" Title: gitprotocol-common .\" Author: [FIXME: author] [see http://www.docbook.org/tdg5/en/html/author] .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: 2026-06-29 .\" Manual: Git Manual .\" Source: Git 2.55.0 .\" Language: Persian .\" .TH "GITPROTOCOL\-COMMON" "5" "2026\-06\-29" "Git 2\&.55\&.0" "Git Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "نام (NAME)" gitprotocol-common \- موارد مشترک میان پروتکل‌های گوناگون انتقال گیت .SH "خلاصه (SYNOPSIS)" .sp .nf .fi .sp .SH "توضیحات (DESCRIPTION)" .sp این سند موارد مشترک میان پروتکل‌های گوناگون انتقال بر بستر شبکه (over\-the\-wire) و قالب‌های فایل مورد استفاده در گیت را تعریف می‌کند\&. .SH "نشانه‌گذاری ABNF (ABNF NOTATION)" .sp از نشانه‌گذاری ABNF مطابق با RFC 5234 در اسناد پروتکل استفاده می‌شود، به جز قواعد بنیادین زیر که جایگزین شده‌اند: .sp .if n \{\ .RS 4 .\} .nf HEXDIG = DIGIT / "a" / "b" / "c" / "d" / "e" / "f" .fi .if n \{\ .RE .\} .sp .sp همچنین قواعد مشترک زیر تعریف می‌شوند: .sp .if n \{\ .RS 4 .\} .nf NUL = %x00 zero\-id = 40*"0" obj\-id = 40*(HEXDIGIT) refname = "HEAD" refname /= "refs/" .fi .if n \{\ .RE .\} .sp .sp یک refname رشته‌ای سلسله‌مراتبی از بایت‌ها (octet string) است که با "refs/" آغاز می‌شود و قواعد اعتبارسنجی دستور \fIgit\-check\-ref\-format\fR را نقض نمی‌کند\&. به طور دقیق‌تر: .sp .RS 4 .ie n \{\ \h'-04' 1.\h'+01'\c .\} .el \{\ .sp -1 .IP " 1." 4.2 .\} می‌تواند شامل اسلش \fB/\fR برای گروه‌بندی سلسله‌مراتبی (دایرکتوری) باشد، اما هیچ بخشی که با اسلش جدا شده است نمی‌تواند با نقطه آغاز شود \&.\&. .RE .sp .RS 4 .ie n \{\ \h'-04' 2.\h'+01'\c .\} .el \{\ .sp -1 .IP " 2." 4.2 .\} باید حداقل شامل یک \fB/\fR\& باشد. این امر وجود یک دسته‌بندی مانند \fBheads/\fR، \fBtags/\fR و غیره را الزامی می‌کند، اما نام‌های واقعی محدودیتی ندارند\&. .RE .sp .RS 4 .ie n \{\ \h'-04' 3.\h'+01'\c .\} .el \{\ .sp -1 .IP " 3." 4.2 .\} نمی‌تواند شامل دو نقطه پیاپی \&.\& در هیچ کجای خود باشد\&. .RE .sp .RS 4 .ie n \{\ \h'-04' 4.\h'+01'\c .\} .el \{\ .sp -1 .IP " 4." 4.2 .\} نمی‌تواند کاراکترهای کنترلی ASCII (یعنی بایت‌هایی با مقدار کمتر از \e040 یا \e177 \fBDEL\fR)، فاصله، مدک \fB~\fR، هشتک \fB^\fR، دو نقطه \fB:\fR، علامت سوال ?، ستاره \fB*\fR، یا قلاب باز [ را در هیچ کجای خود داشته باشد\&. .RE .sp .RS 4 .ie n \{\ \h'-04' 5.\h'+01'\c .\} .el \{\ .sp -1 .IP " 5." 4.2 .\} نمی‌تواند با اسلش \fB/\fR یا نقطه \&.\& پایان یابد\&. .RE .sp .RS 4 .ie n \{\ \h'-04' 6.\h'+01'\c .\} .el \{\ .sp -1 .IP " 6." 4.2 .\} نمی‌تواند با توالی \fB\&.lock\fR\& پایان یابد\&. .RE .sp .RS 4 .ie n \{\ \h'-04' 7.\h'+01'\c .\} .el \{\ .sp -1 .IP " 7." 4.2 .\} نمی‌تواند شامل توالی \fB@\fR{\& باشد\&. .RE .sp .RS 4 .ie n \{\ \h'-04' 8.\h'+01'\c .\} .el \{\ .sp -1 .IP " 8." 4.2 .\} نمی‌تواند شامل \fB\e\e\fR\& باشد\&. .RE .SH "قالب PKT\-LINE (PKT\-LINE FORMAT)" .sp بخش عمده‌ای از بار داده (payload) پیرامون خطوط بسته‌ای (pkt\-line) توصیف می‌شود\&. .sp یک pkt\-line یک رشته باینری با طول متغیر است\&. چهار بایت نخست خط، یعنی pkt\-len، طول کل خط را در مبنای شانزده نشان می‌دهد\&. مقدار pkt\-len خود شامل این ۴ بایت که برای نمایش هگزادسیمال طول استفاده شده‌اند نیز می‌شود\&. .sp یک pkt\-line می‌تواند شامل داده‌های باینری باشد، بنابراین پیاده‌سازان باید اطمینان حاصل کنند که روال‌های تجزیه و قالب‌بندی pkt\-line به صورت 8\-bit clean عمل می‌کنند\&. .sp یک خط غیرباینری باید با یک LF خاتمه یابد، که در صورت وجود باید در طول کل محاسبه شود\&. گیرنده‌ها باید با pkt\-lineهای حاوی داده‌های غیرباینری به طور یکسان رفتار کنند چه شامل LF پایانی باشند و چه نباشند (حذف LF در صورت وجود، و بدون اشکال‌گیری در صورت عدم وجود آن)\&. .sp بیشینه طول بخش داده‌های یک pkt\-line برابر با ۶۵۵۱۶ بایت است\&. پیاده‌سازی‌ها نباید pkt\-lineهایی ارسال کنند که طول آن‌ها از ۶۵۵۲۰ تجاوز کند (۶۵۵۱۶ بایت بار داده + ۴ بایت داده‌های طول)\&. .sp پیاده‌سازی‌ها نباید یک pkt\-line خالی ("0004") ارسال کنند\&. .sp یک pkt\-line با فیلد طول 0 ("0000")، که flush\-pkt نامیده می‌شود، یک حالت خاص است و باید رفتاری متفاوت از یک pkt\-line خالی ("0004") با آن شود\&. .sp .if n \{\ .RS 4 .\} .nf 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" .fi .if n \{\ .RE .\} .sp .sp مثال‌ها (به صورت رشته‌های سبک C): .sp .if n \{\ .RS 4 .\} .nf pkt\-line actual value \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\- "0006a\en" "a\en" "0005a" "a" "000bfoobar\en" "foobar\en" "0004" "" .fi .if n \{\ .RE .\} .sp .SH "گیت (GIT)" .sp بخشی از مجموعه \fBgit\fR(1)