GIT-UPLOAD-PACK(1) دستورات عمومی کاربر GIT-UPLOAD-PACK(1)

git-upload-pack - ارسال اشیاء بسته‌بندی‌شده در پاسخ به git-fetch-pack

git-upload-pack [--[no-]strict] [--timeout=<n>] [--stateless-rpc]
                  [--advertise-refs] <directory>

توسط git fetch-pack فراخوانی می‌شود، بررسی می‌کند که طرف مقابل چه اشیائی را کم دارد، و پس از بسته‌بندی آن‌ها را ارسال می‌کند.

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

--strict, --no-strict

اگر <directory> یک دایرکتوری گیت نباشد، <directory>/.git/ را امتحان نکن.

--timeout=<n>

قطع انتقال پس از <n> ثانیه عدم فعالیت.

--stateless-rpc

تنها یک چرخه خواندن-نوشتن را با stdin و stdout انجام بده. این با مدل پردازش درخواست HTTP POST سازگار است که در آن برنامه ممکن است درخواست را بخواند، پاسخ را بنویسد، و باید خارج شود.

--http-backend-info-refs

توسط git-http-backend(1) برای پاسخ به درخواست‌های $GIT_URL/info/refs?service=git-upload-pack به کار می‌رود. بخش «Smart Clients» در gitprotocol-http(5) و «HTTP Transport» در مستندات gitprotocol-v2(5) را ببینید. همچنین توسط git-receive-pack(1) شناخته می‌شود.

<directory>

مخزنی که همگام‌سازی از آن انجام می‌شود.

GIT_PROTOCOL

متغیر داخلی مورد استفاده برای دست‌تکانی (handshaking) پروتکل مخابره‌ای. مدیران سرور ممکن است نیاز داشته باشند برخی شیوه‌های انتقال را طوری پیکربندی کنند که این متغیر اجازه عبور داشته باشد. توضیحات مربوطه را در git(1) ببینید.

GIT_NO_LAZY_FETCH

هنگام کلون کردن یا واکشی از یک مخزن جزئی (یعنی مخزنی که خود با --filter کلون شده است)، ممکن است برنامه سمت سرور upload-pack نیاز داشته باشد اشیاء اضافه‌ای را از بالادست خود واکشی کند تا درخواست را تکمیل نماید. به‌طور پیش‌فرض، upload-pack از انجام چنین واکشی تنبلانه‌ای (lazy fetch) خودداری می‌کند، زیرا git fetch ممکن است دستورات دلخواهی را که در پیکربندی و قلاب‌های (hooks) مخزن مبدأ مشخص شده‌اند اجرا کند (و upload-pack تلاش می‌کند تا حتی در دایرکتوری‌های غیرقابل اعتماد .git نیز با امنیت اجرا شود).

این رفتار با تنظیم داخلی متغیر GIT_NO_LAZY_FETCH روی مقدار 1 توسط upload-pack پیاده‌سازی شده است. اگر می‌خواهید این رفتار را لغو کنید (زیرا در حال واکشی از یک کلون جزئی هستید و مطمئنید که به آن اعتماد دارید)، می‌توانید به‌طور صریح GIT_NO_LAZY_FETCH را روی 0 تنظیم کنید.

بیشتر دستورات گیت نباید در یک دایرکتوری غیرقابل اعتماد .git اجرا شوند (بخش SECURITY در git(1) را ببینید). برنامه upload-pack تلاش می‌کند تا از هرگونه گزینه پیکربندی خطرناک یا قلاب‌های مخزنی که به آن سرویس می‌دهد دوری کند، و کلون کردن یک دایرکتوری غیرقابل اعتماد و اجرای دستورات روی کلون حاصل را ایمن سازد.

برای سطح بالاتری از امنیت، ممکن است بتوانید upload-pack را با یک کاربر جایگزین اجرا کنید. جزئیات به پلتفرم بستگی خواهد داشت، اما در بسیاری از سیستم‌ها می‌توانید اجرا کنید:

git clone --no-local --upload-pack='sudo -u nobody git-upload-pack' ...

gitnamespaces(7)

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

2026-06-29 Git 2.55.0