GIT-LS-TREE(1) Git Manual GIT-LS-TREE(1)

git-ls-tree - فهرست کردن محتویات یک شیء درختی در گیت

git ls-tree [-d] [-r] [-t] [-l] [-z]
            [--name-only] [--name-status] [--object-only] [--full-name] [--full-tree] [--abbrev[=<n>]] [--format=<format>]
            <tree-ish> [<path>...]

محتویات یک شیء درختی مشخص را فهرست می‌کند، مانند کاری که "/bin/ls -a" در دایرکتوری کاری فعلی انجام می‌دهد. توجه داشته باشید که:

•رفتار آن اندکی با "/bin/ls" متفاوت است از این جهت که <path> صرفاً فهرستی از الگوها را برای تطبیق مشخص می‌کند؛ به عنوان مثال مشخص کردن نام دایرکتوری (بدون -r) رفتار متفاوتی خواهد داشت و ترتیب آرگومان‌ها اهمیتی ندارد.
•رفتار آن شبیه به "/bin/ls" است از این جهت که <path> نسبت به دایرکتوری کاری فعلی در نظر گرفته می‌شود. برای مثال هنگامی که در یک دایرکتوری sub هستید که شامل دایرکتوری dir است، می‌توانید دستور git ls-tree -r HEAD dir را اجرا کنید تا محتویات درخت را فهرست نمایید (که همان sub/dir در HEAD است). در این حالت تمایلی ندارید درختی را مشخص کنید که در سطح ریشه نیست (برای مثال git ls-tree -r HEAD:sub dir)، زیرا این امر منجر به درخواست برای sub/sub/dir در کامیت HEAD می‌شود. با این حال، با ارسال گزینه --full-tree می‌توان از دایرکتوری کاری فعلی صرف‌نظر کرد.

<tree-ish>

شناسه یک شیء شبیه به درخت (tree-ish).

-d

فقط خود ورودی درختِ نام‌برده را نشان می‌دهد، نه فرزندان آن را.

-r

پیمایش بازگشتی در زیردرخت‌ها (sub-trees).

-t

نمایش ورودی‌های درخت حتی زمانی که قرار است پیمایش بازگشتی در آن‌ها انجام شود. اگر -r ارسال نشده باشد، تأثیری ندارد. -d به معنای فعال بودن -t است.

-l, --long

نمایش اندازه شیء برای ورودی‌های blob (فایل).

-z

پایان خطوط با \0 در خروجی و عدم نقل‌قول برای نام فایل‌ها. برای اطلاعات بیشتر بخش «قالب خروجی (OUTPUT FORMAT)» را در زیر ببینید.

--name-only, --name-status

فقط نام فایل‌ها را فهرست می‌کند (به جای خروجی "طولانی")، در هر سطر یکی. نمی‌تواند با --object-only ترکیب شود.

--object-only

فقط نام شیءها را فهرست می‌کند، در هر سطر یکی. نمی‌تواند با --name-only یا --name-status ترکیب شود. این معادل با تعیین --format='%(objectname)' است، اما هم برای این گزینه و هم برای آن قالب دقیق، دستور به جای عبور از سازوکار قالب‌بندی عمومی از یک مسیر کد بهینه‌سازی‌شده دستی استفاده می‌کند.

--abbrev[=<n>]

به جای نمایش سطرهای کامل شیء هگزادسیمال ۴۰ بایتی، کوتاه‌ترین پیشوندی را نشان می‌دهد که حداقل به طول <n> رقم هگز باشد و به طور یکتا به شیء اشاره کند. تعداد ارقام غیر پیش‌فرض را می‌توان با --abbrev=<n> مشخص کرد.

--full-name

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

--full-tree

فهرست‌بندی را به دایرکتوری کاری فعلی محدود نمی‌کند. این گزینه متضمن --full-name است.

--format=<format>

رشته‌ای که %(fieldname) را از نتیجه نمایش‌داده‌شده درون‌یابی می‌کند. همچنین %% را به %، و %xNN را (که در آن NN ارقام هگزادسیمال هستند) به نویسه‌ای با کد هگز NN تبدیل می‌کند؛ برای مثال %x00 به \0 (NUL)، %x09 به \t (TAB) و %x0a به \n (LF) تبدیل می‌شود. در صورت مشخص شدن، --format نمی‌تواند با سایر گزینه‌های تغییردهنده قالب، از جمله --long، --name-only و --object-only ترکیب شود.

[<path>...]

هنگامی که مسیرها مشخص شده باشند، آن‌ها را نشان می‌دهد (توجه داشته باشید که این‌ها واقعاً نام مسیرهای خام نیستند، بلکه فهرستی از الگوها برای تطبیق هستند). در غیر این صورت به طور ضمنی از سطح ریشه درخت به عنوان تنها آرگومان مسیر استفاده می‌کند.

قالب خروجی ls-tree توسط گزینه --format، یا سایر گزینه‌های تغییردهنده قالب مانند --name-only و غیره تعیین می‌شود (توضیحات --format را در بالا ببینید).

استفاده از برخی دستورالعمل‌های --format معادل با استفاده از آن گزینه‌ها است، اما فراخوانی سازوکار کامل قالب‌بندی می‌تواند کندتر از به‌کارگیری یک گزینه قالب‌بندی مناسب باشد.

در مواردی که --format دقیقاً به یک گزینه موجود نگاشت شود، ls-tree از مسیر سریع‌تر مناسب استفاده خواهد کرد. بنابراین قالب پیش‌فرض معادل است با:

%(objectmode) %(objecttype) %(objectname)%x09%(path)

این قالب خروجی با آنچه گزینه‌های --index-info و --stdin در git update-index انتظار دارند سازگار است.

هنگامی که گزینه -l استفاده شود، قالب تغییر می‌کند به:

%(objectmode) %(objecttype) %(objectname) %(objectsize:padded)%x09%(path)

اندازه شیء که توسط <objectname> مشخص شده بر حسب بایت ارائه می‌شود و با حداقل عرض ۷ نویسه راست‌چین می‌گردد. اندازه شیء فقط برای ورودی‌های blob (فایل) ارائه می‌شود؛ برای سایر ورودی‌ها نویسه - به جای اندازه قرار می‌گیرد.

بدون گزینه -z، نام‌های مسیر با نویسه‌های "غیرمعمول" همان‌طور که برای متغیر پیکربندی core.quotePath توضیح داده شده نقل‌قول می‌شوند (به git-config(1) مراجعه کنید). با استفاده از -z نام فایل دقیقاً همان‌طور که هست چاپ می‌شود و سطر با یک بایت NUL پایان می‌یابد.

قالب سفارشی‌سازی‌شده:

امکان چاپ با یک قالب سفارشی با استفاده از گزینه --format وجود دارد که قادر است فیلدهای مختلف را با نماد %(fieldname) درون‌یابی کند. برای مثال، اگر فقط به فیلدهای "objectname" و "path" نیاز دارید، می‌توانید با یک "--format" مشخص به این صورت اجرا کنید:

git ls-tree --format='%(objectname) %(path)' <tree-ish>

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

objectmode

حالت دسترسی (mode) شیء.

objecttype

نوع شیء (commit، blob یا tree).

objectname

نام شیء.

objectsize[:padded]

اندازه یک شیء blob (اگر یک commit یا tree باشد، علامت "-"). همچنین از یک قالب فاصله‌گذاری‌شده اندازه با "%(objectsize:padded)" پشتیبانی می‌کند.

path

نام مسیر (pathname) شیء.

git-update-index(1), git-config(1)

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

2026-06-29 Git 2.55.0