GIT-SEND-PACK(1) Git Manual GIT-SEND-PACK(1)

git-send-pack - ارسال اشیای بسته‌بندی‌شده از طریق پروتکل گیت به مخزن دیگر

git send-pack [--mirror] [--dry-run] [--force]
                [--receive-pack=<git-receive-pack>]
                [--verbose] [--thin] [--atomic]
                [--[no-]signed | --signed=(true|false|if-asked)]
                [<host>:]<directory> (--all | <ref>...)

معمولاً ترجیح می‌دهید به جای این دستور از git push استفاده کنید، که یک پوشش سطح‌بالاتر برای این دستور است. git-push(1) را ببینید.

دستور git-receive-pack را روی یک مخزن (که احتمالاً دوردست است) فراخوانی می‌کند و آن را با ارسال ارجاع‌های مشخص‌شده، از روی مخزن فعلی به‌روزرسانی می‌نماید.

--receive-pack=<git-receive-pack>

مسیر برنامه git-receive-pack در سمت دوردست. گاهی هنگام ارسال به یک مخزن دوردست از طریق ssh و زمانی که برنامه در دایرکتوری‌های موجود در متغیر پیش‌فرض $PATH قرار ندارد مفید است.

--exec=<git-receive-pack>

مشابه --receive-pack=<git-receive-pack>.

--all

به‌جای مشخص کردن صریح ارجاع‌هایی که باید به‌روزرسانی شوند، تمام headهای موجود در سمت محلی را به‌روزرسانی می‌کند.

--stdin

فهرست ارجاع‌ها را از ورودی استاندارد (stdin)، هر کدام در یک خط دریافت می‌کند. اگر علاوه بر این گزینه، ارجاع‌هایی در خط فرمان نیز مشخص شده باشند، ارجاع‌های دریافتی از stdin پس از ارجاع‌های خط فرمان پردازش می‌شوند.

اگر --stateless-rpc همراه با این گزینه مشخص شده باشد، فهرست ارجاع‌ها باید در قالب بسته‌ای (pkt-line) باشد. هر ارجاع باید در یک بسته جداگانه قرار گیرد و فهرست باید با یک بسته flush خاتمه یابد.

--dry-run

همه کارها را به جز ارسال واقعی به‌روزرسانی‌ها انجام می‌دهد.

--force

به‌طور معمول، این دستور از به‌روزرسانی ارجاع دوردستی که نیای (ancestor) ارجاع محلیِ استفاده‌شده برای بازنویسی آن نیست، خودداری می‌کند. این پرچم این بررسی را غیرفعال می‌سازد. این بدان معناست که ممکن است مخزن دوردست کامیت‌هایی را از دست بدهد؛ با احتیاط از آن استفاده کنید.

--verbose

اجرا با نمایش جزئیات کامل.

--thin

ارسال یک بسته «کم‌حجم» (thin pack)، که برای کاهش ترافیک شبکه، اشیا را بر پایه اشیایی که در بسته گنجانده نشده‌اند به‌صورت تفاضلی (deltified) ثبت می‌کند.

--atomic

استفاده از یک تراکنش اتمیک (تجزیه‌ناپذیر) برای به‌روزرسانی ارجاع‌ها. در صورتی که به‌روزرسانی هر یک از ارجاع‌ها با شکست مواجه شود، کل عملیات ارسال شکست خواهد خورد بدون اینکه تغییری در هیچ‌یک از ارجاع‌ها ایجاد شود.

--signed, --no-signed, --signed=(true|false|if-asked)

امضای دیجیتال درخواست ارسال با GPG برای به‌روزرسانی ارجاع‌ها در سمت گیرنده، تا امکان بررسی آن توسط قلاب‌ها (hooks) و/یا ثبت در لاگ فراهم شود. اگر برابر با false یا --no-signed باشد، هیچ امضایی انجام نخواهد شد. اگر برابر با true یا --signed باشد، در صورتی که سرور از ارسال‌های امضاشده پشتیبانی نکند، عملیات ارسال شکست می‌خورد. اگر بر روی if-asked تنظیم شود، تنها در صورتی امضا می‌شود که سرور از ارسال‌های امضاشده پشتیبانی کند. همچنین در صورتی که فراخوانی واقعی به gpg --sign با شکست مواجه شود، عملیات ارسال با خطا روبرو خواهد شد. برای جزئیات مربوط به سمت دریافت‌کننده به git-receive-pack(1) مراجعه کنید.

--push-option=<string>

رشته مشخص‌شده را به عنوان گزینه ارسال (push option) برای استفاده توسط قلاب‌ها در سمت سرور ارسال می‌کند. اگر سرور از گزینه‌های ارسال پشتیبانی نکند، با خطا متوقف می‌شود. برای جزئیات بیشتر به git-push(1) و githooks(5) مراجعه کنید.

<host>

میزبان دوردستی که مخزن را در خود جای داده است. هنگامی که این بخش مشخص شود، git-receive-pack از طریق ssh فراخوانی می‌شود.

<directory>

مخزنی که باید به‌روزرسانی شود.

<ref>...

ارجاع‌های دوردست برای به‌روزرسانی.

سه روش برای تعیین اینکه کدام ارجاع‌ها در سمت دوردست به‌روزرسانی شوند وجود دارد.

با پرچم --all، تمام ارجاع‌هایی که به‌صورت محلی وجود دارند به سمت دوردست منتقل می‌شوند. در صورت استفاده از این پرچم، نمی‌توانید هیچ <ref> مشخصی را تعیین کنید.

بدون --all و بدون هیچ <ref>، آن دسته از headهایی که هم در سمت محلی و هم در سمت دوردست وجود دارند، به‌روزرسانی می‌شوند.

هنگامی که یک یا چند <ref> به‌طور صریح مشخص شوند (چه در خط فرمان یا از طریق --stdin)، می‌تواند یک الگوی منفرد یا جفتی از الگوها باشد که با دونقطه «:» از هم جدا شده‌اند (این بدان معناست که نام یک ارجاع نمی‌تواند شامل دونقطه باشد). یک الگوی منفرد <name> تنها فرم خلاصه‌شده‌ای برای <name>:<name> است.

هر جفت الگو از یک بخش مبدأ (قبل از دونقطه) و یک بخش مقصد (بعد از دونقطه) تشکیل شده است. ارجاعی که باید ارسال شود با یافتن موردی که با بخش مبدأ مطابقت دارد تعیین می‌شود، و این‌که به کجا ارسال شود با استفاده از بخش مقصد مشخص می‌گردد. قواعد به‌کاررفته برای مطابقت یک ارجاع همان قواعدی است که توسط git rev-parse برای تفکیک نام یک ارجاع نمادین استفاده می‌شود. git-rev-parse(1) را ببینید.

•اگر <src> دقیقاً با یکی از ارجاع‌های محلی مطابقت نداشته باشد، یک خطا محسوب می‌شود.
•اگر <dst> با بیش از یک ارجاع دوردست مطابقت داشته باشد، یک خطا محسوب می‌شود.
•اگر <dst> با هیچ ارجاع دوردستی مطابقت نداشته باشد، در این صورت یکی از دو حالت زیر است:
•باید با "refs/" شروع شود؛ در این حالت، <dst> عیناً به عنوان مقصد استفاده می‌شود.
•<src> == <dst> باشد و ارجاعی که با <src> مطابقت دارد نباید در مجموعه ارجاع‌های دوردست وجود داشته باشد؛ ارجاعی که در سمت محلی با <src> تطبیق داده شده به عنوان نام مقصد به کار می‌رود.

بدون گزینه --force، ارجاع <src> در سمت دوردست تنها در صورتی ذخیره می‌شود که <dst> وجود نداشته باشد، یا <dst> یک زیرمجموعه سره (یعنی یک نیا / ancestor) از <src> باشد. این بررسی که تحت عنوان «بررسی جلوبردن سریع» (fast-forward check) شناخته می‌شود، برای جلوگیری از بازنویسی تصادفی ارجاع دوردست و از دست رفتن کامیت‌های دیگران از آن انجام می‌گیرد.

با --force، بررسی جلوبردن سریع برای تمام ارجاع‌ها غیرفعال می‌شود.

به‌صورت اختیاری، می‌توان پیشوند مثبت + را قبل از یک پارامتر <ref> قرار داد تا بررسی جلوبردن سریع تنها برای همان ارجاع غیرفعال شود.

git-receive-pack(1)، git-push(1)

بخشی از مجموعه git(1)

2026-06-29 Git 2.55.0