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

git-commit-graph - نوشتن و اعتبارسنجی فایل‌های گراف کامیت گیت

git commit-graph verify [--object-dir <dir>] [--shallow] [--[no-]progress]
git commit-graph write [--object-dir <dir>] [--append]
                        [--split[=<strategy>]] [--reachable | --stdin-packs | --stdin-commits]
                        [--changed-paths] [--[no-]max-new-filters <n>] [--[no-]progress]
                        <split-options>

مدیریت فایل سریال‌سازی‌شده گراف کامیت (commit-graph).

--object-dir

استفاده از دایرکتوری داده‌شده برای مکان فایل‌های بسته (packfiles) و فایل commit-graph. این پارامتر برای تعیین مکان یک مسیر جایگزین (alternate) به کار می‌رود که تنها دارای دایرکتوری اشیا (objects) است، نه یک دایرکتوری کامل .git. انتظار می‌رود فایل commit-graph در دایرکتوری <dir>/info و فایل‌های pack در دایرکتوری <dir>/pack قرار داشته باشند. اگر دایرکتوری نتواند به یک مسیر مطلق تبدیل شود، یا با هیچ دایرکتوری شیء شناخته‌شده‌ای مطابقت نداشته باشد، git commit-graph ... با وضعیت غیر صفر خارج خواهد شد.

--progress, --no-progress

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

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 -- <path> فراهم می‌کند. اگر این گزینه داده شود، نوشتن‌های بعدی commit-graph به طور خودکار فرض می‌کنند که این گزینه مد نظر بوده است. از گزینه --no-changed-paths برای متوقف کردن ذخیره این داده‌ها استفاده کنید. گزینه --changed-paths به صورت ضمنی با پیکربندی commitGraph.changedPaths=true فعال می‌شود.

با گزینه --max-new-filters=<n>، حداکثر n فیلتر بلوم جدید تولید می‌کند (در صورتی که --changed-paths مشخص شده باشد). اگر n برابر با -1 باشد، هیچ محدودیتی اعمال نمی‌شود. فقط کامیت‌های موجود در لایه جدید در این محدودیت شمرده می‌شوند. برای محاسبه ماسبق فیلترهای بلوم روی لایه‌های پیشین، توصیه می‌شود از --split=replace استفاده شود. بر پیکربندی commitGraph.maxNewFilters اولویت دارد.

با گزینه --split[=<strategy>]، فایل commit-graph را به صورت زنجیره‌ای از چندین فایل commit-graph ذخیره‌شده در <dir>/info/commit-graphs می‌نویسد. لایه‌های commit-graph بر اساس راهبرد و سایر گزینه‌های تفکیک با یکدیگر ادغام می‌شوند. کامیت‌های جدیدی که از قبل در commit-graph نیستند در یک فایل نوک (tip) جدید اضافه می‌شوند. این فایل در صورت برقراری شرایط ادغام زیر با فایل موجود ادغام می‌شود:

•اگر --split=no-merge مشخص شده باشد، ادغام هرگز انجام نمی‌شود و گزینه‌های باقی‌مانده نادیده گرفته می‌شوند. گزینه --split=replace زنجیره موجود را با زنجیره جدید بازنویسی می‌کند. گزینه خالی --split تصمیم‌گیری را به گزینه‌های باقی‌مانده واگذار می‌کند. (توجه داشته باشید که ادغام زنجیره‌ای از گراف‌های کامیت، زنجیره موجود را با یک زنجیره با طول ۱ جایگزین می‌کند که در آن، نخستین و تنها فایل افزایشی کل گراف را نگه می‌دارد).
•اگر --size-multiple=<X> مشخص نشده باشد، فرض کنید X برابر با ۲ است. اگر فایل tip جدید دارای N کامیت باشد و tip قبلی دارای M کامیت باشد و X برابر N بزرگتر از M باشد، آن‌گاه دو فایل را در یک فایل ادغام می‌کند.
•اگر --max-commits=<M> با M به عنوان یک عدد صحیح مثبت مشخص شده باشد، و فایل tip جدید بیش از M کامیت داشته باشد، آن‌گاه tip جدید را با tip قبلی ادغام می‌کند.

در نهایت، اگر --expire-time=<datetime> مشخص نشده باشد، فرض کنید datetime زمان فعلی باشد. پس از نوشتن گراف کامیت تفکیک‌شده (split commit-graph)، تمامی commit-graphهای استفاده‌نشده‌ای که زمان تغییر آن‌ها قدیمی‌تر از datetime است را حذف می‌کند.

verify

فایل commit-graph را می‌خواند و محتویات آن را در برابر پایگاه داده اشیا (object database) اعتبارسنجی می‌کند. برای بررسی داده‌های آسیب‌دیده یا خراب به کار می‌رود.

با گزینه --shallow، تنها فایل commit-graph نوک (tip) را در زنجیره‌ای از commit-graphهای تفکیک‌شده بررسی می‌کند.

•نوشتن یک فایل commit-graph برای کامیت‌های بسته‌بندی‌شده در دایرکتوری محلی .git.
$ git commit-graph write
•نوشتن یک فایل commit-graph و گسترش فایل فعلی commit-graph با استفاده از کامیت‌های موجود در <pack-index>.
$ echo <pack-index> | 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

وجود اشیای جایگزین (replace objects) یا پیوندهای کامیت (commit grafts) خواندن از یا نوشتن در commit-graph را غیرفعال می‌کند. به git-replace(1) مراجعه کنید.

تمام موارد زیر این خط در این بخش به طور گزینشی از مستندات 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) مراجعه کنید.

به gitformat-commit-graph(5) مراجعه کنید.

gitformat-commit-graph(5), git-config(1), git-replace(1)

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

2026-06-29 Git 2.55.0