GIT-ARCHIVE(1) Git Manual GIT-ARCHIVE(1)

git-archive - ساخت بایگانی از فایل‌های یک درخت مشخص

git archive [--format=<fmt>] [--list] [--prefix=<prefix>/] [<extra>]
              [-o <file> | --output=<file>] [--worktree-attributes]
              [--remote=<repo> [--exec=<git-upload-archive>]] <tree-ish>
              [<path>...]

یک بایگانی با قالب مشخص‌شده که شامل ساختار درختیِ درخت نام‌برده است ایجاد کرده و آن را در خروجی استاندارد می‌نویسد. در صورت تعیین <prefix>، این پیشوند به ابتدای نام فایل‌ها در بایگانی اضافه می‌شود.

رفتار git archive هنگامی که یک شناسه درخت (tree ID) به آن داده می‌شود در مقایسه با زمانی که شناسه کامیت (commit ID) یا شناسه برچسب (tag ID) داده می‌شود متفاوت است. وقتی شناسه درخت داده شود، از زمان فعلی به عنوان زمان تغییر هر فایل در بایگانی استفاده می‌شود. از سوی دیگر، وقتی شناسه کامیت یا برچسب مشخص شود، از زمان کامیت ثبت‌شده در شیء کامیت ارجاع‌شده استفاده خواهد شد. علاوه بر این، در صورت استفاده از قالب tar، شناسه کامیت در یک هدر pax سراسری گسترش‌یافته ذخیره می‌شود؛ این مقدار را می‌توان با استفاده از git get-tar-commit-id استخراج کرد. در فایل‌های ZIP نیز به عنوان توضیح فایل (file comment) ذخیره می‌شود.

--format=<fmt>

قالب بایگانی خروجی. مقادیر ممکن عبارتند از tar، zip، tar.gz، tgz، و هر قالبی که با استفاده از گزینه پیکربندی tar.<format>.command تعریف شده باشد. اگر --format مشخص نشده باشد و فایل خروجی تعیین شده باشد، در صورت امکان قالب از نام فایل برداشت می‌شود (برای مثال، نوشتن در foo.zip باعث می‌شود خروجی در قالب zip باشد). در غیر این صورت، قالب خروجی tar خواهد بود.

-l, --list

نمایش تمامی قالب‌های موجود.

-v, --verbose

گزارش روند پیشرفت در خروجی خطای استاندارد (stderr).

--prefix=<prefix>/

افزودن پیشوند <prefix>/ به ابتدای مسیرها در بایگانی. می‌تواند تکرار شود؛ راست‌ترین مقدار آن برای تمام فایل‌های ردگیری‌شده استفاده می‌شود. برای اطلاع از اینکه کدام مقدار توسط --add-file استفاده می‌شود، به توضیحات زیر مراجعه کنید.

مقدار <prefix> دقیقاً همان‌طور که وارد شده استفاده می‌شود و نرمال‌سازی نمی‌شود. ممکن است شامل اسلش‌های ابتدایی یا مؤلفه‌های دایرکتوری والد باشد (مانند ../). برخی از برنامه‌های مصرف‌کننده بایگانی ممکن است چنین مسیرهایی را بالقوه ناامن تلقی کرده و در زمان استخراج، آنها را اصلاح کنند یا هشدار دهند.

-o <file>, --output=<file>

نوشتن بایگانی در <file> به جای خروجی استاندارد (stdout).

--add-file=<file>

افزودن یک فایل ردگیری‌نشده به بایگانی. برای افزودن چندین فایل می‌توان آن را تکرار کرد. مسیر فایل در بایگانی با الحاق مقدار آخرین گزینه --prefix (در صورت وجود) پیش از این --add-file و نام پایه (basename) فایل <file> ساخته می‌شود.

--add-virtual-file=<path>:<content>

افزودن محتوای مشخص‌شده به بایگانی. برای افزودن چندین فایل می‌توان آن را تکرار کرد.

آرگومان <path> می‌تواند با یک نویسه گیومه دوتایی شروع و پایان یابد؛ نام فایل درون آن به عنوان یک رشته به سبک C تفسیر می‌شود، یعنی بک‌اسلش به عنوان نویسه اسکیپ تعبیر می‌گردد. اگر مسیر شامل دونقطه (:) باشد، باید درون گیومه قرار گیرد تا از اشتباه گرفته شدن دونقطه به عنوان جداکننده بین مسیر و محتوا جلوگیری شود، یا اگر مسیر با نویسه گیومه شروع یا تمام شود نیز باید درون گیومه باشد.

حالت فایل محدود به فایل معمولی است و این گزینه ممکن است مشمول محدودیت‌های خط فرمان وابسته به پلتفرم باشد. برای موارد پیچیده‌تر، یک فایل ردگیری‌نشده بنویسید و به جای آن از --add-file استفاده کنید.

توجه داشته باشید که برخلاف --add-file، مسیر ایجادشده در بایگانی تحت تأثیر گزینه --prefix قرار نمی‌گیرد، زیرا یک <path> کامل می‌تواند به عنوان مقدار این گزینه داده شود.

--worktree-attributes

جستجوی مشخصه‌ها در فایل‌های .gitattributes در درخت کاری نیز (به بخش “مشخصه‌ها (ATTRIBUTES)” مراجعه کنید).

--mtime=<time>

تنظیم زمان تغییر (mtime) ورودی‌های بایگانی. بدون این گزینه، در صورتی که <tree-ish> یک کامیت یا برچسب باشد از زمان کامیت‌کننده (committer time) استفاده می‌شود و اگر یک درخت باشد از زمان فعلی استفاده خواهد شد.

<extra>

می‌تواند هر گزینه‌ای باشد که بخش پشتیبان (backend) بایگانی‌ساز آن را درک می‌کند. بخش بعدی را ببینید.

--remote=<repo>

به جای ساخت بایگانی tar از مخزن محلی، یک بایگانی tar را از یک مخزن دوردست (ریموت) دریافت می‌کند. توجه داشته باشید که مخزن دوردست ممکن است محدودیت‌هایی در مورد اینکه کدام عبارت‌های sha1 در <tree-ish> مجاز هستند اعمال کند. برای جزئیات به git-upload-archive(1) مراجعه کنید.

--exec=<git-upload-archive>

همراه با --remote برای مشخص کردن مسیر به git-upload-archive در سمت دوردست استفاده می‌شود.

<tree-ish>

درخت یا کامیت مورد نظر برای تولید بایگانی.

<path>

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

-<digit>

تعیین سطح فشرده‌سازی. مقادیر بزرگ‌تر به دستور اجازه می‌دهند تا زمان بیشتری را برای فشرده‌سازی به اندازه کوچک‌تر صرف کند. مقادیر پشتیبانی‌شده از -0 (فقط ذخیره/بدون فشرده‌سازی) تا -9 (بهترین ضریب فشرده‌سازی) هستند. در صورت تعیین نشدن، پیش‌فرض -6 است.

-<number>

تعیین سطح فشرده‌سازی. این مقدار به دستور فشرده‌سازی پیکربندی‌شده در tar.<format>.command ارسال خواهد شد. برای اطلاع از فهرست سطوح پشتیبانی‌شده و سطح پیش‌فرض در صورت مشخص نشدن این گزینه، به صفحه راهنمای دستور پیکربندی‌شده مراجعه کنید.

tar.umask

این متغیر می‌تواند برای محدود کردن بیت‌های دسترسی ورودی‌های بایگانی tar استفاده شود. پیش‌فرض 0002 است که بیت نوشتن برای همگان (world write) را خاموش می‌کند. مقدار ویژه "user" نشان می‌دهد که به جای آن از umask کاربر بایگانی‌کننده استفاده خواهد شد. برای جزئیات به umask(2) مراجعه کنید. اگر --remote استفاده شود، تنها پیکربندی مخزن دوردست اعمال می‌شود.

tar.<format>.command

این متغیر یک دستور پوسته را مشخص می‌کند که خروجی tar تولیدشده توسط git archive باید از طریق پایپ به آن هدایت شود. دستور با استفاده از پوسته اجرا می‌شود و فایل tar تولیدشده در ورودی استاندارد آن قرار می‌گیرد، و باید خروجی نهایی را در خروجی استاندارد خود تولید کند. هر گزینه‌ای مربوط به سطح فشرده‌سازی به دستور ارسال خواهد شد (مانند -9).

قالب‌های tar.gz و tgz به طور خودکار تعریف شده‌اند و به طور پیش‌فرض از دستور جادویی git archive gzip استفاده می‌کنند که یک پیاده‌سازی داخلی از gzip را فراخوانی می‌کند.

tar.<format>.remote

در صورت true بودن، قالب را برای استفاده کلاینت‌های دوردست از طریق git-upload-archive(1) فعال می‌کند. پیش‌فرض برای قالب‌های تعریف‌شده توسط کاربر false است، اما برای قالب‌های tar.gz و tgz برابر true می‌باشد.

export-ignore

فایل‌ها و دایرکتوری‌های دارای مشخصه export-ignore به فایل‌های بایگانی اضافه نخواهند شد. برای جزئیات به gitattributes(5) مراجعه کنید.

export-subst

اگر مشخصه export-subst برای فایلی تنظیم شده باشد، گیت هنگام افزودن این فایل به بایگانی چندین جانگهدار (placeholder) را بسط می‌دهد. برای جزئیات به gitattributes(5) مراجعه کنید.

توجه داشته باشید که مشخصه‌ها به طور پیش‌فرض از فایل‌های .gitattributes در درختی که در حال بایگانی است گرفته می‌شوند. اگر می‌خواهید نحوه تولید خروجی را پس از واقعه تغییر دهید (مثلاً بدون افزودن export-ignore مناسب در .gitattributes آن، کامیت کرده‌اید)، فایل .gitattributes خارج‌شده (checked out) را بر حسب نیاز تنظیم کنید و از گزینه --worktree-attributes استفاده نمایید. متناوباً می‌توانید مشخصه‌های لازم را که باید هنگام بایگانی هر درختی اعمال شوند در فایل $GIT_DIR/info/attributes خود نگه دارید.

git archive --format=tar --prefix=junk/ HEAD | (cd /var/tmp/ && tar xf -)

ایجاد یک بایگانی tar شامل محتویات آخرین کامیت روی شاخه فعلی، و استخراج آن در دایرکتوری /var/tmp/junk.

git archive --format=tar --prefix=git-1.4.0/ v1.4.0 | gzip >git-1.4.0.tar.gz

ایجاد یک فایل فشرده tarball برای نسخه انتشار v1.4.0.

git archive --format=tar.gz --prefix=git-1.4.0/ v1.4.0 >git-1.4.0.tar.gz

مشابه مورد بالا، اما با استفاده از مدیریت داخلی tar.gz.

git archive --prefix=git-1.4.0/ -o git-1.4.0.tar.gz v1.4.0

مشابه مورد بالا، اما قالب از فایل خروجی استنباط می‌شود.

git archive --format=tar --prefix=git-1.4.0/ v1.4.0^{tree} | gzip >git-1.4.0.tar.gz

ایجاد یک فایل فشرده tarball برای نسخه انتشار v1.4.0، اما بدون هدر سراسری گسترش‌یافته pax.

git archive --format=zip --prefix=git-docs/ HEAD:Documentation/ > git-1.4.0-docs.zip

قرار دادن همه‌چیز در دایرکتوری Documentation/ مربوط به HEAD فعلی در git-1.4.0-docs.zip، با پیشوند git-docs/.

git archive -o latest.zip HEAD

ایجاد یک بایگانی Zip شامل محتویات آخرین کامیت در شاخه فعلی. توجه داشته باشید که قالب خروجی از پسوند فایل خروجی استنباط می‌شود.

git archive -o latest.tar --prefix=build/ --add-file=configure --prefix= HEAD

ایجاد یک بایگانی tar شامل محتویات آخرین کامیت در شاخه فعلی بدون پیشوند، و فایل ردگیری‌نشده configure با پیشوند build/.

git config tar.tar.xz.command "xz -c"

پیکربندی قالب "tar.xz" برای ساخت فایل‌های tar فشرده‌شده با LZMA. می‌توانید با مشخص کردن --format=tar.xz یا با ایجاد یک فایل خروجی مانند -o foo.tar.xz از آن استفاده کنید.

gitattributes(5)

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

2026-06-29 Git 2.55.0