GIT-COMMIT-GRAPH(1) دستورات عمومی کاربر GIT-COMMIT-GRAPH(1)
نام (NAME)
git-commit-graph - نوشتن و اعتبارسنجی فایلهای گراف کامیت گیت
خلاصه دستور (SYNOPSIS)
git commit-graph verify [--object-dir
] [--shallow] [--[no-]progress]
git commit-graph write [--object-dir ] [--append]
[--split[=]] [--reachable | --stdin-packs | --stdin-commits]
[--changed-paths] [--[no-]max-new-filters ] [--[no-]progress]
توضیحات (DESCRIPTION)
مدیریت فایل سریالسازیشده گراف کامیت (commit-graph).
گزینهها (OPTIONS)
--object-dir
استفاده از دایرکتوری دادهشده برای مکان فایلهای بسته (packfiles) و
فایل commit-graph. این پارامتر برای تعیین مکان یک مسیر جایگزین
(alternate) به کار میرود که تنها دارای دایرکتوری اشیا (objects)
است، نه یک دایرکتوری کامل .git. انتظار میرود فایل commit-graph در
دایرکتوری /info و فایلهای pack در دایرکتوری /pack قرار
داشته باشند. اگر دایرکتوری نتواند به یک مسیر مطلق تبدیل شود، یا با
هیچ دایرکتوری شیء شناختهشدهای مطابقت نداشته باشد، git commit-graph
... با وضعیت غیر صفر خارج خواهد شد.
--progress, --no-progress
روشن یا خاموش کردن صریح نمایش میزان پیشرفت. اگر هیچکدام مشخص نشود،
در صورتی که خروجی خطای استاندارد به یک ترمینال متصل باشد، میزان
پیشرفت نشان داده میشود.
دستورها (COMMANDS)
write
نوشتن یک فایل commit-graph بر اساس کامیتهای یافتشده در فایلهای
pack. اگر گزینه پیکربندی core.commitGraph غیرفعال باشد، این دستور
یک هشدار صادر کرده و سپس بدون نوشتن فایل commit-graph با وضعیت
موفقیتآمیز برمیگردد.
با گزینه --stdin-packs، گراف کامیت جدید را فقط با پیمایش اشیا در
نمایههای بسته (pack-indexes) مشخصشده تولید میکند. (نمیتواند با
--stdin-commits یا --reachable ترکیب شود.)
با گزینه --stdin-commits، گراف کامیت جدید را با پیمایش کامیتها از
کامیتهای مشخصشده در ورودی استاندارد (stdin) به صورت فهرستی از OIDها
در مبنای شانزده (یک OID در هر خط) تولید میکند. OIDهایی که به
غیرکامیت منتهی میشوند (خواه مستقیماً یا با باز کردن برچسبها) بدون
اعلام نادیده گرفته میشوند. OIDهایی که بدفرم بوده یا وجود ندارند، یک
خطا ایجاد میکنند. (نمیتواند با --stdin-packs یا --reachable ترکیب
شود.)
با گزینه --reachable، گراف کامیت جدید را با پیمایش کامیتها از تمامی
ارجاعها (refs) تولید میکند. (نمیتواند با --stdin-commits یا
--stdin-packs ترکیب شود.)
با گزینه --append، تمام کامیتهای موجود در فایل فعلی commit-graph را
شامل میشود.
با گزینه --changed-paths، اطلاعات مربوط به مسیرهای تغییریافته بین
یک کامیت و نخستین والد آن را محاسبه کرده و مینویسد. این عملیات در
مخازن بزرگ ممکن است مدتی طول بکشد. این گزینه بهبود کارایی قابلتوجهی
برای دریافت تاریخچه یک دایرکتوری یا یک فایل با دستور git log --
فراهم میکند. اگر این گزینه داده شود، نوشتنهای بعدی
commit-graph به طور خودکار فرض میکنند که این گزینه مد نظر بوده است.
از گزینه --no-changed-paths برای متوقف کردن ذخیره این دادهها
استفاده کنید. گزینه --changed-paths به صورت ضمنی با پیکربندی
commitGraph.changedPaths=true فعال میشود.
با گزینه --max-new-filters=، حداکثر n فیلتر بلوم جدید تولید
میکند (در صورتی که --changed-paths مشخص شده باشد). اگر n برابر با
-1 باشد، هیچ محدودیتی اعمال نمیشود. فقط کامیتهای موجود در لایه جدید
در این محدودیت شمرده میشوند. برای محاسبه ماسبق فیلترهای بلوم روی
لایههای پیشین، توصیه میشود از --split=replace استفاده شود. بر
پیکربندی commitGraph.maxNewFilters اولویت دارد.
با گزینه --split[=]، فایل commit-graph را به صورت
زنجیرهای از چندین فایل commit-graph ذخیرهشده در
/info/commit-graphs مینویسد. لایههای commit-graph بر اساس
راهبرد و سایر گزینههای تفکیک با یکدیگر ادغام میشوند. کامیتهای جدیدی
که از قبل در commit-graph نیستند در یک فایل نوک (tip) جدید اضافه
میشوند. این فایل در صورت برقراری شرایط ادغام زیر با فایل موجود
ادغام میشود:
• اگر --split=no-merge مشخص شده باشد، ادغام هرگز انجام نمیشود و
گزینههای باقیمانده نادیده گرفته میشوند. گزینه --split=replace
زنجیره موجود را با زنجیره جدید بازنویسی میکند. گزینه خالی
--split تصمیمگیری را به گزینههای باقیمانده واگذار میکند. (توجه
داشته باشید که ادغام زنجیرهای از گرافهای کامیت، زنجیره موجود را
با یک زنجیره با طول ۱ جایگزین میکند که در آن، نخستین و تنها
فایل افزایشی کل گراف را نگه میدارد).
• اگر --size-multiple= مشخص نشده باشد، فرض کنید X برابر با ۲
است. اگر فایل tip جدید دارای N کامیت باشد و tip قبلی دارای M
کامیت باشد و X برابر N بزرگتر از M باشد، آنگاه دو فایل را در یک
فایل ادغام میکند.
• اگر --max-commits= با M به عنوان یک عدد صحیح مثبت مشخص شده
باشد، و فایل tip جدید بیش از M کامیت داشته باشد، آنگاه tip جدید
را با tip قبلی ادغام میکند.
در نهایت، اگر --expire-time= مشخص نشده باشد، فرض کنید
datetime زمان فعلی باشد. پس از نوشتن گراف کامیت تفکیکشده (split
commit-graph)، تمامی commit-graphهای استفادهنشدهای که زمان
تغییر آنها قدیمیتر از datetime است را حذف میکند.
verify
فایل commit-graph را میخواند و محتویات آن را در برابر پایگاه داده
اشیا (object database) اعتبارسنجی میکند. برای بررسی دادههای
آسیبدیده یا خراب به کار میرود.
با گزینه --shallow، تنها فایل commit-graph نوک (tip) را در زنجیرهای
از commit-graphهای تفکیکشده بررسی میکند.
مثالها (EXAMPLES)
• نوشتن یک فایل commit-graph برای کامیتهای بستهبندیشده در دایرکتوری
محلی .git.
$ git commit-graph write
• نوشتن یک فایل commit-graph و گسترش فایل فعلی commit-graph با
استفاده از کامیتهای موجود در .
$ echo | git commit-graph write --stdin-packs
• نوشتن یک فایل commit-graph شامل تمامی کامیتهای قابل دستیابی
(reachable).
$ git show-ref -s | git commit-graph write --stdin-commits
• نوشتن یک فایل commit-graph شامل تمامی کامیتهای موجود در فایل فعلی
commit-graph همراه با کامیتهای قابل دستیابی از HEAD.
$ git rev-parse HEAD | git commit-graph write --stdin-commits --append
هشدارها (CAVEATS)
وجود اشیای جایگزین (replace objects) یا پیوندهای کامیت (commit grafts)
خواندن از یا نوشتن در commit-graph را غیرفعال میکند. به git-replace(1)
مراجعه کنید.
پیکربندی (CONFIGURATION)
تمام موارد زیر این خط در این بخش به طور گزینشی از مستندات git-config(1)
گنجانده شدهاند. محتوا همان چیزی است که در آنجا یافت میشود:
commitGraph.generationVersion
نوع نسخه شماره نسل (generation number version) را برای استفاده در
هنگام نوشتن یا خواندن فایل commit-graph مشخص میکند. اگر نسخه ۱ مشخص
شود، تاریخهای تصحیحشده کامیت نوشته یا خوانده نخواهند شد. مقدار
پیشفرض ۲ است.
commitGraph.maxNewFilters
مقدار پیشفرض را برای گزینه --max-new-filters در دستور git
commit-graph write مشخص میکند (نگاه کنید به git-commit-graph(1)).
commitGraph.changedPaths
اگر true باشد، دستور git commit-graph write به طور پیشفرض فیلترهای
بلوم مسیرهای تغییریافته را محاسبه کرده و مینویسد که معادل با ارسال
--changed-paths است. اگر false یا تنظیمنشده باشد، فیلترهای بلوم
مسیرهای تغییریافته در حین اجرای git commit-graph write تنها در
صورتی نوشته میشوند که این فیلترها از قبل در فایل فعلی commit-graph
وجود داشته باشند. این مطابق با رفتار پیشفرض git commit-graph write
بدون هیچ گزینه --[no-]changed-paths است. برای بازنویسی یک فایل
commit-graph بدون هیچ فیلتری، از گزینه --no-changed-paths استفاده
کنید. گزینه خط فرمان --[no-]changed-paths همواره بر این پیکربندی
اولویت دارد. مقدار پیشفرض تنظیمنشده است.
commitGraph.readChangedPaths
منسوخ شده است. در صورت true بودن معادل با
commitGraph.changedPathsVersion=-1 و در صورت false بودن معادل با
commitGraph.changedPathsVersion=0 است. (اگر
commitGraph.changedPathVersion نیز تنظیم شده باشد،
commitGraph.changedPathsVersion اولویت خواهد داشت.)
commitGraph.changedPathsVersion
نسخهای از فیلترهای بلوم مسیرهای تغییریافته را مشخص میکند که گیت
میخواند و مینویسد. میتواند -1، 0، 1 یا 2 باشد. توجه داشته باشید که
مقادیر بزرگتر از ۱ ممکن است با نسخههای قدیمیتر گیت که هنوز این
نسخهها را پشتیبانی نمیکنند ناسازگار باشند. هنگام کار در یک محیط با
نسخههای ترکیبی با احتیاط عمل کنید.
پیشفرض -1 است.
اگر -1 باشد، گیت از نسخه فیلترهای بلوم مسیرهای تغییریافته در مخزن
استفاده میکند و در صورت نبود هیچ فیلتری، پیشفرض را 1 در نظر میگیرد.
اگر 0 باشد، گیت هیچ فیلتر بلومی را نمیخواند، و هنگام دستور برای
نوشتن، فیلترهای بلوم نسخه 1 را مینویسد.
اگر 1 باشد، گیت فقط فیلترهای بلوم نسخه 1 را میخواند و فیلترهای بلوم
نسخه 1 را مینویسد.
اگر 2 باشد، گیت فقط فیلترهای بلوم نسخه 2 را میخواند و فیلترهای بلوم
نسخه 2 را مینویسد.
برای اطلاعات بیشتر به git-commit-graph(1) مراجعه کنید.
قالب فایل (FILE FORMAT)
به gitformat-commit-graph(5) مراجعه کنید.
همچنین ببینید (SEE ALSO)
gitformat-commit-graph(5), git-config(1), git-replace(1)
گیت (GIT)
بخشی از مجموعه git(1)
Git 2.55.0 2026-06-29 GIT-COMMIT-GRAPH(1)