'\" t .\" Title: git-receive-pack .\" Author: [FIXME: author] [see http://www.docbook.org/tdg5/en/html/author] .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: 2026-06-29 .\" Manual: دستورات عمومی کاربر .\" Source: Git 2.55.0 .\" Language: Persian .\" .TH "GIT\-RECEIVE\-PACK" "1" "2026\-06\-29" "Git 2\&.55\&.0" "دستورات عمومی کاربر" .\" ----------------------------------------------------------------- .\" * 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)" git-receive-pack \- دریافت موارد ارسال‌شده (push) به مخزن .SH "خلاصه دستور (SYNOPSIS)" .sp .nf \fIgit receive\-pack\fR .fi .sp .SH "توضیحات (DESCRIPTION)" .sp توسط \fIgit send\-pack\fR فراخوانی می‌شود و مخزن را با اطلاعات دریافت‌شده از سمت راه دور به‌روزرسانی می‌کند\&. .sp این دستور معمولاً مستقیماً توسط کاربر نهایی فراخوانی نمی‌شود\&. رابط کاربری این پروتکل در سمت \fIgit send\-pack\fR قرار دارد و این جفت برنامه برای ارسال به‌روزرسانی‌ها به یک مخزن راه دور استفاده می‌شوند\&. برای عملیات دریافت (pull)، به \fBgit-fetch-pack\fR(1) مراجعه کنید\&. .sp این دستور امکان ایجاد و هدایت سریع (fast\-forward) ارجاع‌های sha1 (شاخه‌ها/برچسب‌ها) را در سمت راه دور فراهم می‌کند (به بیان دقیق، \fIgit\-receive\-pack\fR در سمت محلی اجرا می‌شود، اما برای کاربری که در سمت send\-pack نشسته است، این دستور در حال به‌روزرسانی مخزن راه دور است\&. گیج شدید؟) .sp نمونه‌های دنیای واقعی دیگری از استفاده از قلاب‌های update و post\-update در پوشه Documentation/howto یافت می‌شود\&. .sp دستور \fIgit\-receive\-pack\fR به گزینه پیکربندی receive\&.denyNonFastForwards احترام می‌گذارد؛ این گزینه تعیین می‌کند آیا در صورتی که به‌روزرسانی‌های یک ارجاع به‌صورت fast\-forward نباشند، باید رد شوند یا خیر\&. .sp تعدادی دیگر از گزینه‌های پیکربندی *\&receive برای تنظیم دقیق رفتار آن در دسترس هستند، به \fBgit-config\fR(1) مراجعه کنید\&. .SH "گزینه‌ها (OPTIONS)" .PP .RS 4 مخزنی که باید با آن همگام‌سازی شود\&. .RE .PP \-\-\http\-backend\-info\-refs .RS 4 توسط \fBgit-http-backend\fR(1) برای پاسخگویی به درخواست‌های \fB$GIT_URL/info/refs\fR?service=git\-receive\-pack استفاده می‌شود\&. به \fB\-\-\http\-backend\-info\-refs\fR در \fBgit-upload-pack\fR(1) مراجعه کنید\&. .RE .PP \-\-\skip\-connectivity\-check .RS 4 بررسی‌های اتصال را که وجود تمام اشیاء در بستار متعدی (transitive closure) اشیاء قابل دسترسی را اعتبارسنجی می‌کند، دور می‌زند\&. این گزینه برای مدیران سروری در نظر گرفته شده است که می‌خواهند اعتبارسنجی اتصال اشیاء را خارج از گیت پیاده‌سازی کنند\&. این گزینه در مواردی مفید است که سمت سرور اطلاعات اضافی در مورد نحوه استفاده از گیت دارد و بنابراین می‌تواند به تضمین‌های خاصی برای محاسبه کارآمدتر اتصال اشیاء تکیه کند که خود گیت قادر به انجام آن نیست\&. استفاده از این گزینه بدون یک سازوکار خارجی قابل اعتماد برای اطمینان از اتصال کامل اشیاء قابل دسترسی، خطر خراب شدن مخزن را در پی دارد و نباید در حالت عمومی استفاده شود\&. .RE .SH "قلاب PRE\-RECEIVE (PRE\-RECEIVE HOOK)" .sp قبل از به‌روزرسانی هر ارجاع، اگر فایل $GIT_DIR/hooks/pre\-receive وجود داشته و قابل اجرا باشد، یک بار بدون پارامتر فراخوانی می‌شود\&. ورودی استاندارد این قلاب برای هر ارجاعی که قرار است به‌روزرسانی شود، شامل یک خط خواهد بود: .sp .if n \{\ .RS 4 .\} .nf sha1\-old SP sha1\-new SP refname LF .fi .if n \{\ .RE .\} .sp مقدار refname نسبت به $GIT_DIR سنجیده می‌شود؛ به عنوان مثال برای شاخه master این مقدار "refs/heads/master" است\&. دو مقدار sha1 قبل از هر refname، نام اشیاء برای آن refname قبل و بعد از به‌روزرسانی هستند\&. ارجاع‌هایی که ایجاد می‌شوند دارای sha1\-old برابر با 0{40} خواهند بود، در حالی که ارجاع‌هایی که حذف می‌شوند دارای sha1\-new برابر با 0{40} هستند؛ در غیر این صورت sha1\-old و sha1\-new باید اشیاء معتبری در مخزن باشند\&. .sp هنگام پذیرش یک ارسال امضاشده (push امضا‌شده، به \fBgit-push\fR(1) مراجعه کنید)، گواهی push امضاشده در یک blob ذخیره می‌شود و متغیر محیطی \fBGIT_PUSH_CERT\fR را می‌توان برای یافتن نام شیء آن بررسی کرد\&. برای دیدن یک مثال، توضیحات قلاب \fBpost\-receive\fR را مشاهده کنید\&. علاوه بر این، گواهی با استفاده از GPG اعتبارسنجی می‌شود و نتیجه آن در متغیرهای محیطی زیر صادر می‌گردد: .PP \fBGIT_PUSH_CERT_SIGNER\fR .RS 4 نام و نشانی ایمیل صاحب کلیدی که گواهی ارسال را امضا کرده است\&. .RE .PP \fBGIT_PUSH_CERT_KEY\fR .RS 4 شناسه کلید GPG مربوط به کلیدی که گواهی ارسال را امضا کرده است\&. .RE .PP \fBGIT_PUSH_CERT_STATUS\fR .RS 4 وضعیت اعتبارسنجی GPG گواهی ارسال، با استفاده از همان کدهای حروفی استفاده‌شده در قالب \fB%G\fR? خانواده دستورات \fBgit\fR \fBlog\fR (به \fBgit-log\fR(1) مراجعه کنید)\&. .RE .PP \fBGIT_PUSH_CERT_NONCE\fR .RS 4 رشته نانس (nonce) که فرآیند از امضاکننده درخواست کرده تا در گواهی ارسال بگنجاند\&. اگر این مقدار با مقدار ثبت‌شده در هدر "nonce" در گواهی ارسال مطابقت نداشته باشد، ممکن است نشان دهد که گواهی معتبری است اما از یک نشست دیگر "git push" بازپخش شده است\&. .RE .PP \fBGIT_PUSH_CERT_NONCE_STATUS\fR .RS 4 .PP \fBUNSOLICITED\fR .RS 4 دستور "git push \-\-\signed" یک نانس ارسال کرد در حالی که ما درخواستی برای ارسال آن نداده بودیم\&. .RE .PP \fBMISSING\fR .RS 4 دستور "git push \-\-\signed" هیچ هدر نانسی ارسال نکرد\&. .RE .PP \fBBAD\fR .RS 4 دستور "git push \-\-\signed" یک نانس جعلی یا نامعتبر ارسال کرد\&. .RE .PP \fBOK\fR .RS 4 دستور "git push \-\-\signed" همان نانسی را ارسال کرد که ما درخواست کرده بودیم\&. .RE .PP \fBSLOP\fR .RS 4 دستور "git push \-\-\signed" نانسی متفاوت از آنچه اکنون خواسته‌ایم ارسال کرد، اما این نانس مربوط به یک نشست قبلی بوده است\&. به متغیر محیطی \fBGIT_PUSH_CERT_NONCE_SLOP\fR مراجعه کنید\&. .RE .RE .PP \fBGIT_PUSH_CERT_NONCE_SLOP\fR .RS 4 دستور "git push \-\-\signed" نانسی متفاوت از آنچه اکنون خواسته‌ایم ارسال کرد، اما مربوط به نشستی دیگر است که زمان شروع آن به این تعداد ثانیه با نشست فعلی تفاوت دارد\&. تنها زمانی معنادار است که \fBGIT_PUSH_CERT_NONCE_STATUS\fR مقدار \fBSLOP\fR داشته باشد\&. همچنین درباره متغیر \fBreceive\&.certNonceSlop\fR در \fBgit-config\fR(1) بخوانید\&. .RE .sp این قلاب قبل از به‌روزرسانی هر نام ارجاعی و قبل از انجام هرگونه بررسی fast\-forward فراخوانی می‌شود\&. .sp اگر قلاب pre\-receive با وضعیت خروج غیر صفر خارج شود، هیچ به‌روزرسانی انجام نخواهد شد و قلاب‌های update، post\-receive و post\-update نیز فراخوانی نخواهند شد\&. این امر می‌تواند برای انصراف سریع در مواردی که به‌روزرسانی پشتیبانی نمی‌شود، مفید باشد\&. .sp یادداشت‌های مربوط به محیط قرنطینه در زیر را مشاهده کنید\&. .SH "قلاب UPDATE (UPDATE HOOK)" .sp قبل از به‌روزرسانی هر ارجاع، اگر فایل $GIT_DIR/hooks/update وجود داشته و قابل اجرا باشد، به ازای هر ارجاع یک بار با سه پارامتر فراخوانی می‌شود: .sp .if n \{\ .RS 4 .\} .nf $GIT_DIR/hooks/update refname sha1\-old sha1\-new .fi .if n \{\ .RE .\} .sp پارامتر refname نسبت به $GIT_DIR سنجیده می‌شود؛ به عنوان مثال برای شاخه master این مقدار "refs/heads/master" است\&. دو آرگومان sha1 نام اشیاء برای آن refname قبل و بعد از به‌روزرسانی هستند\&. توجه داشته باشید که این قلاب قبل از به‌روزرسانی refname فراخوانی می‌شود، بنابراین یا sha1\-old برابر با 0{40} است (به این معنی که هنوز چنین ارجاعی وجود ندارد)، یا باید با آنچه در refname ثبت شده مطابقت داشته باشد\&. .sp قلاب در صورتی که بخواهد مانع به‌روزرسانی ارجاع نام‌برده شود، باید با وضعیت خروج غیر صفر خارج شود\&. در غیر این صورت باید با وضعیت صفر خارج گردد\&. .sp اجرای موفقیت‌آمیز (وضعیت خروج صفر) این قلاب تضمین نمی‌کند که ارجاع واقعاً به‌روزرسانی خواهد شد، بلکه تنها یک پیش‌نیاز است\&. به همین دلیل ارسال اعلان‌ها (مانند ایمیل) از این قلاب ایده خوبی نیست\&. در عوض از قلاب post\-receive استفاده کنید\&. .SH "قلاب POST\-RECEIVE (POST\-RECEIVE HOOK)" .sp پس از اینکه تمام ارجاع‌ها به‌روزرسانی شدند (یا تلاش شد که به‌روزرسانی شوند)، اگر به‌روزرسانی حداقل یک ارجاع موفقیت‌آمیز بوده باشد، و اگر فایل $GIT_DIR/hooks/post\-receive وجود داشته و قابل اجرا باشد، یک بار بدون پارامتر فراخوانی می‌شود\&. ورودی استاندارد این قلاب برای هر ارجاعی که با موفقیت به‌روزرسانی شده، یک خط خواهد بود: .sp .if n \{\ .RS 4 .\} .nf sha1\-old SP sha1\-new SP refname LF .fi .if n \{\ .RE .\} .sp مقدار refname نسبت به $GIT_DIR سنجیده می‌شود؛ به عنوان مثال برای شاخه master این مقدار "refs/heads/master" است\&. دو مقدار sha1 قبل از هر refname، نام اشیاء برای آن refname قبل و بعد از به‌روزرسانی هستند\&. ارجاع‌هایی که ایجاد شده‌اند دارای sha1\-old برابر با 0{40} خواهند بود، در حالی که ارجاع‌هایی که حذف شده‌اند دارای sha1\-new برابر با 0{40} هستند؛ در غیر این صورت sha1\-old و sha1\-new باید اشیاء معتبری در مخزن باشند\&. .sp متغیرهای محیطی \fBGIT_PUSH_CERT*\fR را می‌توان همانند قلاب \fBpre\-receive\fR، پس از پذیرش یک ارسال امضا‌شده بررسی کرد\&. .sp با استفاده از این قلاب، تولید ایمیل‌هایی که به‌روزرسانی‌های مخزن را شرح می‌دهند بسیار آسان است\&. این اسکریپت نمونه، برای هر ارجاع یک پیام ایمیل شامل فهرست کامیت‌های ارسال‌شده به مخزن می‌فرستد، و گواهی‌های ارسال‌های امضاشده با امضای معتبر را در یک سرویس ثبت لاگ ذخیره می‌کند: .sp .if n \{\ .RS 4 .\} .nf #!/bin/sh # mail out commit update information\&. while read oval nval ref do if expr "$oval" : \*(Aq0*$\*(Aq >/dev/null then echo "Created a new ref, with the following commits:" git rev\-list \-\-\pretty "$nval" else echo "New commits:" git rev\-list \-\-\pretty "$nval" "^$oval" fi | mail \-s "Changes to ref $ref" commit\-list@mydomain done # log signed push certificate, if any if test \-n "${GIT_PUSH_CERT\-}" && test ${GIT_PUSH_CERT_STATUS} = G then ( echo expected nonce is ${GIT_PUSH_NONCE} git cat\-file blob ${GIT_PUSH_CERT} ) | mail \-s "push certificate from $GIT_PUSH_CERT_SIGNER" push\-log@mydomain fi exit 0 .fi .if n \{\ .RE .\} .sp .sp کد خروج حاصل از فراخوانی این قلاب نادیده گرفته می‌شود، با این حال یک کد خروج غیر صفر پیام خطایی ایجاد خواهد کرد\&. .sp توجه داشته باشید که ممکن است هنگام اجرای این قلاب، refname مقدار sha1\-new را نداشته باشد\&. این حالت زمانی به راحتی رخ می‌دهد که کاربر دیگری ارجاع را پس از به‌روزرسانی توسط \fIgit\-receive\-pack\fR اما قبل از اینکه قلاب بتواند آن را ارزیابی کند اصلاح نماید\&. توصیه می‌شود که قلاب‌ها به‌جای مقدار فعلی refname به sha1\-new تکیه کنند\&. .SH "قلاب POST\-UPDATE (POST\-UPDATE HOOK)" .sp پس از تمام پردازش‌های دیگر، اگر حداقل یک ارجاع به‌روزرسانی شده باشد، و اگر فایل $GIT_DIR/hooks/post\-update وجود داشته و قابل اجرا باشد، post\-update همراه با فهرستی از ارجاع‌های به‌روزرسانی‌شده فراخوانی خواهد شد\&. این امر می‌تواند برای پیاده‌سازی هرگونه عملیات پاک‌سازی در کل مخزن استفاده شود\&. .sp کد خروج حاصل از فراخوانی این قلاب نادیده گرفته می‌شود؛ در آن نقطه تنها کاری که برای \fIgit\-receive\-pack\fR باقی مانده خروج است\&. .sp این قلاب می‌تواند به عنوان مثال برای اجرای \fBgit\fR \fBupdate\-server\-info\fR در صورتی که مخزن بسته‌بندی شده و از طریق یک پروتکل انتقال ساده ارائه می‌شود، استفاده گردد\&. .sp .if n \{\ .RS 4 .\} .nf #!/bin/sh exec git update\-server\-info .fi .if n \{\ .RE .\} .sp .SH "محیط قرنطینه (QUARANTINE ENVIRONMENT)" .sp هنگامی که \fBreceive\-pack\fR اشیاء را دریافت می‌کند، آن‌ها در یک پوشه موقت "قرنطینه" داخل پوشه \fB$GIT_DIR/objects\fR قرار می‌گیرند و تنها پس از اتمام موفقیت‌آمیز قلاب \fBpre\-receive\fR به مخزن اصلی اشیاء منتقل می‌شوند\&. اگر ارسال قبل از آن با شکست مواجه شود، پوشه موقت به‌طور کامل حذف می‌گردد\&. .sp این امر چند اثر و نکته قابل مشاهده برای کاربر دارد: .sp .RS 4 .ie n \{\ \h'-04' 1.\h'+01'\c .\} .el \{\ .sp -1 .IP " 1." 4.2 .\} ارسال‌هایی که به دلیل مشکل در بسته دریافتی، اشیاء مفقود، یا به دلیل قلاب \fBpre\-receive\fR با شکست مواجه می‌شوند، هیچ داده‌ای روی دیسک باقی نخواهند گذاشت\&. این ویژگی معمولاً برای جلوگیری از پر شدن دیسک بر اثر ارسال‌های ناموفق مکرر مفید است، اما می‌تواند عیب‌یابی را دشوارتر کند\&. .RE .sp .RS 4 .ie n \{\ \h'-04' 2.\h'+01'\c .\} .el \{\ .sp -1 .IP " 2." 4.2 .\} هر شیئی که توسط قلاب \fBpre\-receive\fR ایجاد شود، در پوشه قرنطینه ایجاد خواهد شد (و تنها در صورت موفقیت منتقل می‌گردد)\&. .RE .sp .RS 4 .ie n \{\ \h'-04' 3.\h'+01'\c .\} .el \{\ .sp -1 .IP " 3." 4.2 .\} قلاب \fBpre\-receive\fR نباید هیچ ارجاعی را طوری به‌روزرسانی کند که به اشیاء قرنطینه‌شده اشاره کنند\&. سایر برنامه‌هایی که به مخزن دسترسی دارند قادر به دیدن این اشیاء نخواهند بود (و اگر قلاب pre\-receive شکست بخورد، آن ارجاع‌ها خراب می‌شوند)\&. برای ایمنی، هرگونه به‌روزرسانی ارجاع از داخل \fBpre\-receive\fR به‌طور خودکار رد می‌شود\&. .RE .SH "همچنین ببینید (SEE ALSO)" .sp \fBgit-send-pack\fR(1), \fBgitnamespaces\fR(7) .SH "گیت (GIT)" .sp بخشی از مجموعه \fBgit\fR(1)