| GIT-CAT-FILE(1) | Git Manual | GIT-CAT-FILE(1) |
نام (NAME)
git-cat-file - ارائه محتوا یا جزئیات اشیاء مخزن
خلاصه دستور (SYNOPSIS)
git cat-file <type> <object>
git cat-file (-e | -p | -t | -s) <object>
git cat-file (--textconv | --filters)
[<rev>:<path|tree-ish> | --path=<path|tree-ish> <rev>]
git cat-file (--batch | --batch-check | --batch-command) [--batch-all-objects]
[--buffer] [--follow-symlinks] [--unordered]
[--textconv | --filters] [-Z]
توضیحات (DESCRIPTION)
خروجی دادن محتویات یا ویژگیهای دیگر مانند اندازه، نوع یا اطلاعات دلتا (delta) برای یک یا چند شیء.
این دستور بسته به اینکه گزینهای از خانواده --batch مشخص شده باشد یا خیر، میتواند در دو حالت عمل کند.
در حالت غیردستهای (non-batch)، دستور اطلاعات مربوط به شیئی را ارائه میدهد که نام آن در خط فرمان ذکر شده است.
در حالت دستهای (batch)، آرگومانها از ورودی استاندارد خوانده میشوند.
گزینهها (OPTIONS)
<object>
-t
-s
-e
-p
<type>
--mailmap, --no-mailmap, --use-mailmap, --no-use-mailmap
--textconv
--filters
--filter=<filter-spec>, --no-filter
قالب --filter=blob:none تمامی blobها را حذف میکند.
قالب --filter=blob:limit=<n>[kmg] اشیاء blob با اندازه حداقل n بایت یا واحد را حذف میکند. n ممکن است صفر باشد. پسوندهای k، m و g میتوانند برای نامگذاری واحدها بر حسب KiB، MiB یا GiB استفاده شوند. برای مثال، blob:limit=1k همانند blob:limit=1024 است.
قالب --filter=object:type=(tag|commit|tree|blob) تمامی اشیائی را که از نوع درخواستی نیستند حذف میکند.
--path=<path>
--batch, --batch=<format>
--batch-check, --batch-check=<format>
--batch-command, --batch-command=<format>
--batch-command دستورات زیر را شناسایی میکند:
contents <object>
info <object>
flush
mailmap (<bool>)
--batch-all-objects
--buffer
--unordered
--follow-symlinks
این گزینه (در حال حاضر) هنگامی که شیئی در ایندکس مشخص شده باشد (مثلاً :link به جای HEAD:link) به جای شیئی در درخت، به درستی کار نمیکند.
این گزینه (در حال حاضر) قابل استفاده نیست مگر اینکه --batch یا --batch-check استفاده شود.
به عنوان مثال، یک مخزن گیت شامل موارد زیر را در نظر بگیرید:
f: a file containing "hello\n" link: a symlink to f dir/link: a symlink to ../f plink: a symlink to ../f alink: a symlink to /etc/passwd
برای یک فایل معمولی f، دستور echo HEAD:f | git cat-file --batch عبارت زیر را چاپ میکند:
ce013625030ba8dba906f756967f9e9ca394464a blob 6
و دستور echo HEAD:link | git cat-file --batch --follow-symlinks همان مورد را چاپ خواهد کرد، درست همانند HEAD:dir/link، زیرا هر دو به HEAD:f اشاره میکنند.
بدون --follow-symlinks، این دستورات دادههای مربوط به خود پیوند نمادین را چاپ میکنند. در مورد HEAD:link، شما چنین خروجی را مشاهده خواهید کرد:
4d1ae35ba2c8ec712fa2a379db44ad639ca277bd blob 1
هر دوی plink و alink به خارج از درخت اشاره دارند، بنابراین به ترتیب چاپ خواهند کرد:
symlink 4 ../f
symlink 11 /etc/passwd
-Z
-z
خروجی (OUTPUT)
اگر -t مشخص شود، یکی از مقادیر <type> چاپ میشود.
اگر -s مشخص شود، اندازه <object> بر حسب بایت.
اگر -e مشخص شود، هیچ خروجی داده نمیشود، مگر اینکه <object> ناقص یا معیوب باشد.
اگر -p مشخص شود، محتویات <object> به صورت خوانا چاپ میشود.
اگر <type> مشخص شود، محتویات خام (اگرچه فشردهنشده) <object> بازگردانده خواهد شد.
خروجی دستهای (BATCH OUTPUT)
اگر --batch یا --batch-check داده شود، cat-file اشیاء را از stdin، هر خط یک شیء میخواند و اطلاعات مربوط به آنها را به همان ترتیبی که خوانده شدهاند چاپ میکند. به طور پیشفرض، کل خط به عنوان یک شیء در نظر گرفته میشود، همانطور که گویی به git-rev-parse(1) ارسال شده است.
هنگامی که --batch-command داده میشود، cat-file دستورات را از stdin، هر خط یک دستور میخواند و اطلاعات را بر اساس دستور ارائهشده چاپ میکند. با --batch-command، دستور info به همراه یک شیء اطلاعات مربوط به شیء را به همان روشی که --batch-check چاپ میکند نمایش میدهد، و دستور contents به همراه یک شیء محتویات را به همان شیوهای که --batch انجام میدهد چاپ میکند.
شما میتوانید اطلاعات نمایشدادهشده برای هر شیء را با استفاده از یک <format> سفارشی مشخص کنید. <format> برای هر شیء به طور دقیق در stdout کپی میشود و جایگزینهای به شکل %(atom) بسط داده شده و یک خط جدید به دنبال آن میآید. اتمهای موجود عبارتند از:
objectname
objecttype
objectmode
objectsize
objectsize:disk
deltabase
rest
اگر هیچ قالبی مشخص نشود، قالب پیشفرض %(objectname) %(objecttype) %(objectsize) است.
اگر --batch مشخص شود، یا اگر --batch-command همراه با دستور contents استفاده شود، اطلاعات شیء همراه با محتویات شیء (متشکل از %(objectsize) بایت) و به دنبال آن یک خط جدید چاپ خواهد شد.
به عنوان مثال، --batch بدون یک قالب سفارشی عبارت زیر را تولید میکند:
<oid> SP <type> SP <size> LF <contents> LF
در حالی که --batch-check='%(objectname) %(objecttype)' عبارت زیر را تولید خواهد کرد:
<oid> SP <type> LF
اگر نامی در stdin مشخص شود که نتوان آن را به شیئی در مخزن ارجاع داد، آنگاه cat-file هر قالب سفارشی را نادیده گرفته و چاپ خواهد کرد:
<object> SP missing LF
اگر نامی در stdin مشخص شود که از طریق --filter= فیلتر شده است، آنگاه cat-file هر قالب سفارشی را نادیده گرفته و چاپ خواهد کرد:
<object> SP excluded LF
اگر نامی مشخص شود که ممکن است به بیش از یک شیء اشاره داشته باشد (یک sha کوتاه مبهم)، آنگاه cat-file هر قالب سفارشی را نادیده گرفته و چاپ خواهد کرد:
<object> SP ambiguous LF
اگر نامی مشخص شود که به یک مدخل زیرماژول در یک درخت اشاره دارد و شیء هدف در مخزن وجود ندارد، آنگاه cat-file هر قالب سفارشی را نادیده گرفته و چاپ میکند (با شناسه شیء مربوط به زیرماژول):
<oid> SP submodule LF
اگر --follow-symlinks استفاده شود، و پیوندی نمادین در مخزن به خارج از مخزن اشاره داشته باشد، آنگاه cat-file هر قالب سفارشی را نادیده گرفته و چاپ خواهد کرد:
symlink SP <size> LF <symlink> LF
پیوند نمادین یا مطلق خواهد بود (که با یک / آغاز میشود)، یا نسبت به ریشه درخت. به عنوان مثال، اگر dir/link به ../../foo اشاره کند، آنگاه <symlink> برابر با ../foo خواهد بود. <size> اندازه پیوند نمادین بر حسب بایت است.
اگر --follow-symlinks استفاده شود، پیامهای خطای زیر نمایش داده خواهند شد:
<object> SP missing LF
زمانی چاپ میشود که پیوند نمادین اولیه درخواستی وجود نداشته باشد.
dangling SP <size> LF <object> LF
زمانی چاپ میشود که پیوند نمادین اولیه وجود دارد، اما چیزی که (به صورت متعدی) به آن اشاره میکند وجود ندارد.
loop SP <size> LF <object> LF
برای حلقههای پیوند نمادین (یا هر پیوند نمادینی که به بیش از ۴۰ بار حل پیوند برای حل نیاز دارد) چاپ میشود.
notdir SP <size> LF <object> LF
زمانی چاپ میشود که در حین حل پیوند نمادین، از یک فایل به عنوان نام دایرکتوری استفاده شود.
در روش جایگزین، هنگامی که -Z ارسال میشود، کاراکترهای شکست خط (line feeds) در هر یک از مثالهای بالا با کاراکترهای پایاندهنده NUL جایگزین میشوند. این امر تضمین میکند که اگر خود خروجی حاوی خط جدید باشد، خروجی همچنان قابل تجزیه (parse) خواهد بود و بنابراین برای مقاصد اسکریپتنویسی توصیه میشود.
هشدارها (CAVEATS)
توجه داشته باشید که اندازههای اشیاء روی دیسک به طور دقیق گزارش میشوند، اما باید در نتیجهگیری درباره اینکه کدام ارجاعات یا اشیاء مسئول مصرف دیسک هستند دقت کرد. اندازه یک شیء فشرده غیردلتا (non-delta) ممکن است بسیار بزرگتر از اندازه اشیائی باشد که نسبت به آن دلتا شدهاند، اما انتخاب اینکه کدام شیء پایه و کدام دلتا باشد اختیاری است و ممکن است در طول یک فرآیند بستهبندی مجدد (repack) تغییر کند.
همچنین توجه داشته باشید که چندین نسخه از یک شیء ممکن است در پایگاه داده اشیاء وجود داشته باشد؛ در این حالت، مشخص نیست که اندازه یا پایه دلتای کدام نسخه گزارش خواهد شد.
گیت (GIT)
بخشی از مجموعه git(1)
| 2026-06-29 | Git 2.55.0 |