GIT-FSCK(1) Git Manual GIT-FSCK(1)

git-fsck - بررسی پیوستگی و اعتبارسنجی اشیاء در پایگاه‌داده

git fsck [--tags] [--root] [--unreachable] [--cache] [--no-reflogs]
         [--[no-]full] [--strict] [--verbose] [--lost-found]
         [--[no-]dangling] [--[no-]progress] [--connectivity-only]
         [--[no-]name-objects] [--[no-]references] [<object>...]

پیوستگی و اعتبار اشیاء موجود در پایگاه‌داده را بررسی و اعتبارسنجی می‌کند.

<object>

شیئی که به عنوان سر (head) ردگیری دسترسی‌ناپذیری در نظر گرفته می‌شود.

اگر هیچ شیئی داده نشود، git fsck به‌طور پیش‌فرض از فایل نمایه (index)، تمام ارجاعات SHA-1 در فضای نام refs و تمام لاگ‌های ارجاع (reflogs - مگر اینکه --no-reflogs مشخص شده باشد) به عنوان سرها استفاده می‌کند.

--unreachable

اشیائی را که وجود دارند اما از هیچ‌یک از گره‌های مرجع قابل دسترسی نیستند چاپ می‌کند.

--dangling, --no-dangling

اشیائی را که وجود دارند اما هرگز به‌طور مستقیم استفاده نمی‌شوند چاپ می‌کند (پیش‌فرض). از --no-dangling می‌توان برای حذف این اطلاعات از خروجی استفاده کرد.

--root

گره‌های ریشه را گزارش می‌دهد.

--tags

تگ‌ها را گزارش می‌دهد.

--cache

هر شیء ثبت‌شده در نمایه (index) را نیز به عنوان یک گره سر برای ردگیری دسترسی‌ناپذیری در نظر می‌گیرد.

--no-reflogs

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

--full

نه تنها اشیاء موجود در GIT_OBJECT_DIRECTORY ($GIT_DIR/objects)، بلکه اشیاء یافت‌شده در مخازن اشیاء جایگزین ذکرشده در GIT_ALTERNATE_OBJECT_DIRECTORIES یا $GIT_DIR/objects/info/alternates، و همچنین آرشیوهای بسته‌بندی‌شده گیت موجود در $GIT_DIR/objects/pack و زیرپوشه‌های بسته‌بندی متناظر در مخازن اشیاء جایگزین را نیز بررسی می‌کند. این حالت اکنون پیش‌فرض است؛ می‌توانید آن را با --no-full خاموش کنید.

--connectivity-only

تنها پیوستگی اشیاء در دسترس را بررسی می‌کند و اطمینان حاصل می‌کند که تمام اشیاء ارجاع‌شده توسط یک تگ، ثبت یا درختِ در دسترس، موجود باشند. این کار با جلوگیری از خواندن کامل blobها، عملیات را سرعت می‌بخشد (اگرچه همچنان بررسی می‌کند که blobهای ارجاع‌شده وجود داشته باشند). این گزینه خرابی را در commitها و treeها شناسایی می‌کند، اما بررسی‌های معنایی (مانند خطاهای قالب‌بندی) را انجام نمی‌دهد. خرابی در اشیاء blob به‌هیچ‌وجه تشخیص داده نخواهد شد.

تگ‌ها، ثبت‌ها و درخت‌های غیرقابل دسترس نیز بررسی می‌شوند تا نوک بخش‌های معلق تاریخچه پیدا شود. اگر به این خروجی اهمیتی نمی‌دهید و می‌خواهید سرعت را بیشتر افزایش دهید، از --no-dangling استفاده کنید.

--strict

بررسی دقیق‌تری را فعال می‌کند، به‌ویژه برای شناسایی حالت فایلی با بیت g+w ثبت‌شده که توسط نسخه‌های قدیمی‌تر گیت ایجاد شده بود. مخازن موجود، از جمله کرنل لینوکس، خود گیت و مخزن پراکنده دارای اشیاء قدیمی هستند که این بررسی را تحریک می‌کنند، اما توصیه می‌شود پروژه‌های جدید با این فلگ بررسی شوند.

--verbose

نمایش جزئیات بیشتر (حالت پرگویی).

--lost-found

اشیاء معلق (dangling) را بسته به نوع آن‌ها در .git/lost-found/commit/ یا .git/lost-found/other/ می‌نویسد. اگر شیء از نوع blob باشد، محتوای آن در فایل نوشته می‌شود، نه نام شیء.

--name-objects

هنگام نمایش نام اشیاء در دسترس، علاوه بر SHA-1 نامی را نیز نمایش می‌دهد که نحوه دسترسی به آن‌ها را توصیف می‌کند، سازگار با git-rev-parse(1)، به عنوان مثال HEAD@{1234567890}~25^2:src/.

--progress, --no-progress

وضعیت پیشرفت به‌طور پیش‌فرض در جریان خطای استاندارد هنگام اتصال به ترمینال گزارش می‌شود، مگر اینکه --no-progress یا --verbose مشخص شده باشد. گزینه --progress نمایش وضعیت پیشرفت را حتی اگر خطای استاندارد به ترمینال هدایت نشده باشد تحمیل می‌کند.

--references, --no-references

بررسی یکپارچگی پایگاه‌داده مراجع را از طریق git refs verify کنترل می‌کند. برای جزئیات به git-refs(1) مراجعه کنید. حالت پیش‌فرض، بررسی پایگاه‌داده مراجع است.

تمام موارد زیر در این بخش به‌صورت گزینشی از مستندات git-config(1) درج شده‌اند. محتوا همان چیزی است که در آنجا یافت می‌شود:

fsck.<msg-id>

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

تنظیم fsck.<msg-id> توسط git-fsck(1) دریافت خواهد شد، اما برای پذیرش pushهای چنین داده‌هایی باید receive.fsck.<msg-id> را تنظیم کنید، یا برای clone یا fetch کردن آن‌ها fetch.fsck.<msg-id> را تنظیم نمایید.

ادامه مستندات برای اختصار به fsck.* اشاره می‌کند، اما همین موضوع در مورد متغیرهای متناظر receive.fsck.* و fetch.fsck.* نیز صدق می‌کند.

برخلاف متغیرهایی مانند color.ui و core.editor، متغیرهای receive.fsck.<msg-id> و fetch.fsck.<msg-id> در صورت تنظیم نشدن، به پیکربندی fsck.<msg-id> رجوع نمی‌کنند. برای پیکربندی یکنواخت تنظیمات یکسان fsck در شرایط مختلف، هر سه متغیر باید روی مقادیر یکسانی تنظیم شوند.

هنگامی که fsck.<msg-id> تنظیم شود، می‌توان با پیکربندی تنظیم fsck.<msg-id> خطاها را به هشدار و بالعکس تغییر داد که در آن <msg-id> شناسه پیام fsck است و مقدار یکی از گزینه‌های error، warn یا ignore است. برای راحتی کار، fsck پیشوند خطا/هشدار را با شناسه پیام قرار می‌دهد؛ برای مثال "missingEmail: invalid author/committer line - missing email" بدین معنی است که تنظیم fsck.missingEmail = ignore آن مشکل را نادیده خواهد گرفت.

به‌طور کلی، بهتر است اشیاء مسئله‌دار موجود را با fsck.skipList شمارش و مشخص کنید، به جای اینکه نوع خرابی مشترک این اشیاء را برای نادیده گرفته شدن فهرست کنید؛ زیرا دومی باعث می‌شود موارد جدیدی از همان خرابی‌ها نادیده باقی بمانند.

تنظیم یک مقدار ناشناخته برای fsck.<msg-id> باعث متوقف شدن fsck می‌شود، اما انجام همین کار برای receive.fsck.<msg-id> و fetch.fsck.<msg-id> تنها باعث هشدار گیت خواهد شد.

برای مقادیر پشتیبانی‌شده <msg-id> به بخش Fsck Messages در git-fsck(1) مراجعه کنید.

fsck.skipList

مسیر فایلی شامل فهرستی از نام اشیاء (یعنی یک SHA-1 کامل و بدون اختصار در هر خط) که مشخص است به روشی غیرمهلک خراب هستند و باید نادیده گرفته شوند. در نسخه‌های گیت ۲.۲۰ و بعد از آن، کامنت‌ها (#)، خطوط خالی و فاصله‌های ابتدایی و انتهایی نادیده گرفته می‌شوند. در نسخه‌های قدیمی‌تر، هر چیزی جز یک SHA-1 در هر خط خطا ایجاد می‌کند.

این ویژگی زمانی مفید است که یک پروژه قدیمی باید علیرغم وجود ثبت‌های اولیه حاوی خطاهایی که با اطمینان می‌توان نادیده گرفت (مانند آدرس ایمیل نامعتبر ثبت‌کننده)، پذیرفته شود. نکته: اشیاء معیوب و خراب را نمی‌توان با این تنظیم نادیده گرفت.

مانند fsck.<msg-id>، این متغیر نیز دارای معادل‌های receive.fsck.skipList و fetch.fsck.skipList است.

برخلاف متغیرهایی مانند color.ui و core.editor، متغیرهای receive.fsck.skipList و fetch.fsck.skipList در صورت تنظیم نشدن، به پیکربندی fsck.skipList رجوع نخواهند کرد. برای پیکربندی یکنواخت تنظیمات fsck در شرایط مختلف، هر سه باید روی مقادیر یکسان تنظیم شوند.

نسخه‌های قدیمی‌تر گیت (قبل از ۲.۲۰) ذکر کرده بودند که فهرست نام اشیاء باید مرتب شده باشد. این هرگز یک الزام نبود؛ نام اشیاء می‌توانستند به هر ترتیبی ظاهر شوند، اما هنگام خواندن فهرست ما مرتب بودن آن را برای پیاده‌سازی جستجوی دودویی داخلی پیگیری می‌کردیم که با فهرست از پیش مرتب‌شده مقداری کار را ذخیره می‌کرد. مگر اینکه فهرست بسیار عظیمی داشتید، دلیلی برای مرتب‌سازی اولیه فهرست وجود نداشت. پس از نسخه ۲.۲۰ گیت به جای آن از یک پیاده‌سازی درهم‌سازی (هش) استفاده می‌شود، بنابراین اکنون دلیلی برای پیش‌مرتب‌سازی فهرست وجود ندارد.

دستور git-fsck سلامت SHA-1 و صحت کلی اشیاء را می‌سنجد و رهگیری کامل دسترسی‌پذیری حاصله و سایر موارد را انجام می‌دهد. هرگونه خرابی یافت‌شده (اشیاء مفقود یا نامعتبر) را چاپ می‌کند، و اگر از پرچم --unreachable استفاده کنید اشیائی را که وجود دارند اما از هیچ‌یک از گره‌های سر مشخص‌شده (یا مجموعه پیش‌فرض، همان‌طور که در بالا ذکر شد) در دسترس نیستند نیز چاپ خواهد کرد.

هر شیء معیوب را باید در نسخه پشتیبان یا سایر آرشیوها پیدا کنید (یعنی می‌توانید آن‌ها را حذف کرده و یک rsync با سایتی دیگر انجام دهید به این امید که دیگران شیئی را که شما خراب کرده‌اید داشته باشند).

اگر core.commitGraph برابر با true باشد، فایل commit-graph نیز با استفاده از git commit-graph verify بررسی خواهد شد. به git-commit-graph(1) مراجعه کنید.

unreachable <type> <object>

شیء <type> با شناسه <object>، در هیچ‌یک از درخت‌ها یا ثبت‌های مشاهده‌شده به صورت مستقیم یا غیرمستقیم ارجاع داده نشده است. این می‌تواند به این معنی باشد که گره ریشه دیگری وجود دارد که شما مشخص نکرده‌اید یا درخت خراب است. اگر گره ریشه‌ای را از قلم نینداخته‌اید، بهتر است گره‌های غیرقابل دسترس را حذف کنید زیرا قابل استفاده نیستند.

missing <type> <object>

شیء <type> با شناسه <object> ارجاع داده شده اما در پایگاه‌داده موجود نیست.

dangling <type> <object>

شیء <type> با شناسه <object> در پایگاه‌داده موجود است اما هرگز به‌طور مستقیم استفاده نشده است. یک ثبت معلق می‌تواند یک گره ریشه باشد.

hash mismatch <object>

پایگاه‌داده دارای شیئی است که هش آن با مقدار پایگاه‌داده شیء مطابقت ندارد. این نشان‌دهنده یک مشکل جدی در یکپارچگی داده‌ها است.

فهرست زیر انواع خطاهایی را که git fsck تشخیص می‌دهد و معنای هر خطا را به همراه شدت پیش‌فرض آن‌ها نشان می‌دهد. شدت خطاها، به جز مواردی که با "(FATAL)" علامت‌گذاری شده‌اند، با تنظیم متغیر پیکربندی متناظر fsck.<msg-id> قابل تغییر است.

badDate

(ERROR) قالب تاریخ نامعتبر در خط پدیدآور/ثبت‌کننده.

badDateOverflow

(ERROR) مقدار تاریخ نامعتبر در خط پدیدآور/ثبت‌کننده.

badEmail

(ERROR) قالب رایانامه (ایمیل) نامعتبر در خط پدیدآور/ثبت‌کننده.

badFilemode

(INFO) یک درخت حاوی مدخل حالت فایل نامعتبر است.

badGpgsig

(ERROR) یک تگ حاوی سربرگ امضای نامعتبر (بریده‌شده/ناقص) مانند gpgsig است.

badHeadTarget

(ERROR) مرجع HEAD یک ارجاع نمادین (symref) است که به یک شاخه اشاره نمی‌کند.

badHeaderContinuation

(ERROR) یک سربرگ ادامه‌دار (مانند gpgsig) به‌طور غیرمنتظره‌ای بریده شده است.

badName

(ERROR) نام پدیدآور/ثبت‌کننده خالی است.

badObjectSha1

(ERROR) یک شیء دارای sha1 نامعتبر است.

badPackedRefEntry

(ERROR) فایل "packed-refs" حاوی یک مدخل نامعتبر است.

badPackedRefHeader

(ERROR) فایل "packed-refs" حاوی یک سربرگ نامعتبر است.

badParentSha1

(ERROR) یک شیء commit دارای sha1 والد نامعتبر است.

badRefContent

(ERROR) یک مرجع دارای محتوای نامعتبر است.

badRefFiletype

(ERROR) یک مرجع دارای نوع فایل نامعتبر است.

badRefName

(ERROR) یک مرجع دارای قالب نامعتبر است.

badRefOid

(ERROR) یک مرجع به شناسه شیء (OID) نامعتبر اشاره دارد.

badReferentName

(ERROR) نام مرجع‌الیه یک ارجاع نمادین نامعتبر است.

badReftableTableName

(WARN) یک جدول reftable دارای نام نامعتبر است.

badTagName

(INFO) یک تگ دارای قالب نامعتبر است.

badTimezone

(ERROR) منطقه زمانی نامعتبر در خط پدیدآور/ثبت‌کننده یافت شد.

badTree

(ERROR) یک درخت قابل پردازش و تجزیه نیست.

badTreeSha1

(ERROR) یک درخت دارای قالب نامعتبر است.

badType

(ERROR) نوع شیء نامعتبر یافت شد.

duplicateEntries

(ERROR) یک درخت حاوی مدخل‌های فایل تکراری است.

emptyName

(WARN) یک مسیر حاوی نام خالی است.

emptyPackedRefsFile

(INFO) فایل "packed-refs" خالی است. در صورت مشاهده این خطا به فهرست پستی git@vger.kernel.org[1] گزارش دهید. از آنجا که تنها نسخه‌های بسیار اولیه گیت چنین فایل خالی "packed_refs" ایجاد می‌کردند، ممکن است در آینده این قانون را سخت‌گیرانه‌تر کنیم.

extraHeaderEntry

(IGNORE) سربرگ‌های اضافی بعد از tagger یافت شد.

fullPathname

(WARN) یک مسیر حاوی مسیر کامل شروع‌شده با "/" است.

gitattributesBlob

(ERROR) شیئی غیر از blob در .gitattributes یافت شد.

gitattributesLarge

(ERROR) حباب (blob) مربوط به .gitattributes بیش از حد بزرگ است.

gitattributesLineLength

(ERROR) حباب .gitattributes حاوی خطوط بسیار طولانی است.

gitattributesMissing

(ERROR) امکان خواندن حباب .gitattributes وجود ندارد.

gitattributesSymlink

(INFO) .gitattributes یک پیوند نمادین است.

gitignoreSymlink

(INFO) .gitignore یک پیوند نمادین است.

gitmodulesBlob

(ERROR) شیئی غیر از blob در .gitmodules یافت شد.

gitmodulesLarge

(ERROR) فایل .gitmodules برای پردازش بیش از حد بزرگ است.

gitmodulesMissing

(ERROR) امکان خواندن حباب .gitmodules وجود ندارد.

gitmodulesName

(ERROR) نام یک زیرماژول نامعتبر است.

gitmodulesParse

(INFO) امکان پردازش حباب .gitmodules وجود نداشت.

gitmodulesPath

(ERROR) مسیر .gitmodules نامعتبر است.

gitmodulesSymlink

(ERROR) .gitmodules یک پیوند نمادین است.

gitmodulesUpdate

(ERROR) یک تنظیم به‌روزرسانی زیرماژول نامعتبر یافت شد.

gitmodulesUrl

(ERROR) یک نشانی URL زیرماژول نامعتبر یافت شد.

hasDot

(WARN) یک درخت حاوی مدخلی به نام . است.

hasDotdot

(WARN) یک درخت حاوی مدخلی به نام .. است.

hasDotgit

(WARN) یک درخت حاوی مدخلی به نام .git است.

largePathname

(WARN) یک درخت حاوی مدخلی با نام مسیر بسیار طولانی است. اگر مقدار fsck.largePathname حاوی دونقطه باشد، آن مقدار به عنوان حداکثر طول مجاز استفاده می‌شود (مثلاً "warn:10" در مورد هر جزء مسیر ۱۱ بایتی یا بیشتر هشدار خواهد داد). مقدار پیش‌فرض ۴۰۹۶ است.

mailmapSymlink

(INFO) .mailmap یک پیوند نمادین است.

missingAuthor

(ERROR) پدیدآور وجود ندارد.

missingCommitter

(ERROR) ثبت‌کننده وجود ندارد.

missingEmail

(ERROR) رایانامه در خط پدیدآور/ثبت‌کننده وجود ندارد.

missingNameBeforeEmail

(ERROR) نام قبل از رایانامه در خط پدیدآور/ثبت‌کننده وجود ندارد.

missingObject

(ERROR) خط object در شیء تگ وجود ندارد.

missingSpaceBeforeDate

(ERROR) فاصله قبل از تاریخ در خط پدیدآور/ثبت‌کننده وجود ندارد.

missingSpaceBeforeEmail

(ERROR) فاصله قبل از رایانامه در خط پدیدآور/ثبت‌کننده وجود ندارد.

missingTag

(ERROR) پایان غیرمنتظره بعد از خط type در یک شیء تگ.

missingTagEntry

(ERROR) خط tag در یک شیء تگ وجود ندارد.

missingTaggerEntry

(INFO) خط tagger در یک شیء تگ وجود ندارد.

missingTree

(ERROR) خط tree در یک شیء commit وجود ندارد.

missingType

(ERROR) مقدار نوع نامعتبر در خط type در یک شیء تگ.

missingTypeEntry

(ERROR) خط type در یک شیء تگ وجود ندارد.

multipleAuthors

(ERROR) چندین خط پدیدآور در یک ثبت (commit) یافت شد.

nulInCommit

(WARN) بایت NUL در بدنه شیء commit یافت شد.

nulInHeader

(FATAL) بایت NUL در سربرگ شیء وجود دارد.

nullSha1

(WARN) درخت حاوی مدخل‌هایی است که به یک sha1 تهی (null) اشاره می‌کنند.

packedRefEntryNotTerminated

(ERROR) فایل "packed-refs" حاوی مدخلی است که به خط جدید ختم نشده است.

packedRefUnsorted

(ERROR) فایل "packed-refs" مرتب‌سازی نشده است.

refMissingNewline

(INFO) یک مرجع آزاد (loose ref) که با خط جدید (LF) پایان نیافته است. از آنجا که پیاده‌سازی‌های معتبر گیت هرگز چنین فایل مرجع آزادی ایجاد نمی‌کنند، ممکن است در آینده به یک خطا تبدیل شود. اگر این خطا را دیدید به فهرست پستی git@vger.kernel.org[1] گزارش دهید، زیرا باید بدانیم چه ابزارهایی چنین فایلی ایجاد کرده‌اند.

symlinkRef

(INFO) یک پیوند نمادین به عنوان symref استفاده شده است. در صورت مشاهده این خطا به فهرست پستی git@vger.kernel.org[1] گزارش دهید، زیرا در حال بررسی امکان حذف پشتیبانی از ایجاد پیوندهای نمادین به عنوان symref هستیم.

symrefTargetIsNotARef

(INFO) مقصد یک ارجاع نمادین نه به یک مرجع ریشه و نه به مرجعی که با "refs/" شروع می‌شود اشاره دارد. اگرچه با استفاده از git symbolic-ref اجازه ایجاد یک symref با اشاره به مرجع‌الیهی خارج از "ref" را می‌دهیم، اما ممکن است در آینده این قانون را سخت‌تر کنیم. در صورت مشاهده به فهرست پستی git@vger.kernel.org[1] گزارش دهید، زیرا باید بدانیم چه ابزارهایی چنین فایلی ایجاد کرده‌اند.

trailingRefContent

(INFO) یک مرجع آزاد دارای محتوای اضافی در انتها است. از آنجا که پیاده‌سازی‌های معتبر گیت هرگز چنین فایلی ایجاد نکرده‌اند، ممکن است در آینده به یک خطا تبدیل شود. اگر این خطا را دیدید به فهرست پستی git@vger.kernel.org[1] گزارش دهید.

treeNotSorted

(ERROR) یک درخت به‌درستی مرتب نشده است.

unknownType

(ERROR) نوع شیء ناشناخته یافت شد.

unterminatedHeader

(FATAL) نبود پایان خط در سربرگ شیء.

zeroPaddedDate

(ERROR) تاریخ دارای صفر پیش‌رو در خط پدیدآور/ثبت‌کننده یافت شد.

zeroPaddedFilemode

(WARN) حالت فایل دارای صفر پیش‌رو در یک درخت یافت شد.

GIT_OBJECT_DIRECTORY

برای مشخص کردن ریشه پایگاه‌داده شیء استفاده می‌شود (معمولاً $GIT_DIR/objects)

GIT_INDEX_FILE

برای مشخص کردن فایل نمایه (index) استفاده می‌شود

GIT_ALTERNATE_OBJECT_DIRECTORIES

برای مشخص کردن ریشه‌های پایگاه‌داده شیء اضافی استفاده می‌شود (معمولاً تنظیم‌نشده)

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

1.
git@vger.kernel.org
mailto:git@vger.kernel.org
2026-06-29 Git 2.55.0