SYNOPSIS

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

DESCRIPTION

データベース内のオブジェクトの接続性(connectivity)と有効性(validity)を検証します

OPTIONS

<object>

到達不能追跡のheadとして扱うオブジェクト。

オブジェクトが指定されていない場合、 git fsck はデフォルトでインデックスファイルと、 その refs 名前空間内のすべてのSHA-1参照と、(--no-reflogs が与えられて無い場合)すべての reflogs を、 head として使用します。

--unreachable

存在するが、どの参照ノードからも到達できないオブジェクトを印刷します。

--[no-]dangling

存在するが「直接」使用されることのないオブジェクトを印刷します(デフォルト)。 --no-dangling を使用して、この情報を出力から省略することができます。

--root

ルートノードを報告します。

--tags

タグを報告します。

--cache

インデックスに記録されているオブジェクトを、到達不能追跡のheadノードとしても考慮します。

--no-reflogs

reflogのエントリによってのみ参照されるコミットが到達可能であるとは見なさないようにします。このオプションは、以前はrefに含まれていたが、現在は含まれていないが、対応するreflogに残っているコミットを検索することのみを目的としています。

--full

GIT_OBJECT_DIRECTORY($GIT_DIR/objects) 内のオブジェクトだけでなく、GIT_ALTERNATE_OBJECT_DIRECTORIES または $GIT_DIR/objects/info/alternates にリストされている代替オブジェクトプール、および $GIT_DIR/objects/pack にあるパックされたGitアーカイブにあるオブジェクトもチェックします。サブディレクトリを代替オブジェクトプールにパックします。いまやこれがデフォルトになりました。 --no-full でオフにできます。

--connectivity-only

到達可能なオブジェクトの接続のみをチェックし、到達可能なタグ、コミット、またはツリーによって参照されるオブジェクトが存在することを確認します。これにより、ブロブの読み取りを完全に回避することで操作が高速化されます(ただし、参照されたブロブが存在するかどうかは引き続きチェックされます)。 これにより、コミットとツリーの破損が検出されますが、セマンティックのチェック(フォーマット・エラーなど)は行われません。ブロブ・オブジェクトの破損はまったく検出されません。

到達不能なタグ、コミット、およびツリーにもアクセスして、履歴のぶら下がっているセグメントのヒントを見つけることができます。この出力を気にせず、さらに高速化したい場合は、 --no-dangling を使用してください。

--strict

より厳密なチェックを有効にします。つまり、古いバージョンのGitによって作成された g+w ビットセットで記録されたファイルモードを捕捉します。 Linuxカーネルや、Git本体や、まばらなリポジトリ(sparse repository)などを含む既存のリポジトリには、 このチェックをトリガーする古いオブジェクトがありますが、 このフラグを使用して新プロジェクトをチェックすることをお勧めします。

--verbose

おしゃべりになります。

--lost-found

タイプに応じて、ぶら下がっているオブジェクトを .git/lost-found/commit/ または .git/lost-found/other/ に書き込みます。オブジェクトがブロブの場合、コンテンツはそのオブジェクト名ではなくファイルに書き込まれます。

--name-objects

到達可能なオブジェクトの名前を表示する場合、SHA-1に加えて、それらがどのように到達可能であるかを説明する名前も表示します。 git-rev-parse(1) と互換性があります。 例えば HEAD@{1234567890}~25^2:src/

--[no-]progress

--no-progress または --verbose が指定されていない限り、進行状況ステータスは、端末に接続されている場合、デフォルトで標準エラーストリームに報告されます。 --progress は、標準エラーストリームが端末に送信されていない場合でも、進行状況出力を強制します。

CONFIGURATION

このセクションの以下のすべては、 git-config(1) ドキュメントの抜粋です。 内容は git-config(1) ドキュメント にあるものと同一です:

fsck.<msg-id>

fsck中に、gitは、現在のバージョンのgitでは生成されず、 transfer.fsckObjects が設定されている場合はネットワーク経由で送信されない、レガシーデータの問題を検出する場合があります。この機能は、そのようなデータを含むレガシーリポジトリの操作をサポートすることを目的としています。

fsck.<msg-id> 設定は、 git-fsck(1) によって取得されますが、代わりに、そのようなデータセット receive.fsck.<msg-id> のプッシュを受け入れるか、または、クローンまたはフェッチのセットである fetch.fsck.<msg-id> を使用します。

この文書の残りの部分では、 話を簡潔にするために fsck.* 変数で説明していますが、 これは、 対応する receive.fsck.* 変数や fetch.fsck.* 変数にも全く同じことが当てはまります。

color.uicore.editor のような変数とは異なり、 receive.fsck.<msg-id>fetch.fsck.<msg-id> 変数は、設定されていない場合、 fsck.<msg-id> 構成にフォールバックしません。 さまざまな状況で同一のfsck設定を均一に構成するには、これら 3 つすべてを同一の値に設定する必要があります。

fsck.<msg-id> が設定されている場合、 fsck.<msg-id> の値を errorwarnignore のいずれか一つとすることにより、エラーを警告に切り替える事もでき、その逆も可能です。そして <msg-id> の部分はメッセージIDです。便利なように、fsckはエラー/警告メッセージの前にメッセージIDを付けます。たとえば「missingEmail: invalid author/committer line - missing email」は、 fsck.missingEmail = ignore を設定するとその問題が非表示になることを意味します。

一般に、これらの問題のあるオブジェクトが共有する破損の種類をリストして無視するのではなく、 fsck.skipList に問題のある既存のオブジェクトを列挙することをお勧めします。前者を実行すると、同じ破損の新しいインスタンスが見過ごされる可能性があります。

不明な fsck.<msg-id> 値を設定すると、fsckが停止(die)しますが、 receive.fsck.<msg-id>fetch.fsck.<msg-id> に対して同じことを行うと、gitは単に警告するだけです。

サポートされている <msg-id> の値については、 git-fsck(1) の「Fsck Messages」セクションを参照してください。

fsck.skipList

既に壊れている(broken)ことが分かっているが、 非致命的であるので無視する必要があるオブジェクト名(1行につき1つの省略されてないSHA-1)のリストへのパス。 Git 2.20 以降では、 コメント(#)文字と、 空行と、 先頭と末尾の空白(whitespace)は無視されます。 これより古いバージョンでは1行につき1つのSHA-1以外は全てエラーになります。

この機能は、無効なコミッターの電子メール アドレスなど、 無視しても安全なエラーが初期のコミットに含まれているにもかかわらず、 確立されているプロジェクトを承認する必要がある場合に便利です。 注意: この設定では壊れているオブジェクト(corrupt objects)をスキップすることはできません。

fsck.<msg-id> と同様に、この変数に対応する receive.fsck.skipList 派生と fetch.fsck.skipList 派生があります。

color.uicore.editor のような変数とは異なり、 receive.fsck.skipList 変数と fetch.fsck.skipList 変数は、設定されていない場合、 fsck.skipList 構成にフォールバックしません。さまざまな状況で同一 fsck 設定を均一に構成するには、 これら 3 つ全てを同一の値に設定する必要があります。

古いバージョンのGit(2.20より前)では、オブジェクト名リストを並べ替える必要があることが文書化されています。これは必須ではなく、オブジェクト名は任意の順序で表示できますが、リストを読み取るときに、内部バイナリ検索実装の目的でリストが並べ替えられているかどうかを追跡しました。これにより、既に並べ替えられたリストでは作業を節約できます。膨大なリストがない限り、リストを事前に並べ替える必要はありませんでした。 Gitバージョン2.20以降では、代わりにハッシュ実装が使用されるため、リストを事前に並べ替える必要はありません。

DISCUSSION

git-fsckは、SHA-1と一般的なオブジェクトの健全性をテストし、結果として得られる到達可能性とその他すべてを完全に追跡します。検出した破損(オブジェクトの欠落または不良)を出力し、 --unreachable フラグを使用すると、存在するが指定されたheadノード(または上記デフォルト達)のいずれからも到達できないオブジェクトも出力します。

つまり、それは、あなたのバックアップや、他のアーカイブで見つけなければならない破損したオブジェクトです(つまり、あなたは、それらを削除して、他の誰かが破損したオブジェクトを持っていることを期待して、他のサイトと「rsync」を実行できます)。

core.commitGraph が true の場合、 commit-graph ファイルも「git commit-graph verify」を使用して検査されます。 git-commit-graph(1) を参照してください。

Extracted Diagnostics

unreachable <type> <object>

<type> というタイプである <object> というオブジェクトは、表示されるツリーまたはコミットのいずれにおいても、実際には直接または間接的に参照されていません。これは、指定していない別のルートノードがあるか、ツリーが破損していることを意味している可能性があります。ルートノードを見逃していない場合は、到達不能なノードは使用できないため、削除することをお勧めします。

missing <type> <object>

この <type> というタイプの <object> というオブジェクトは参照されていますが、データベースに存在しません。

dangling <type> <object>

この <type> タイプの <object> というオブジェクトはデータベースに存在しますが、「直接」使用されることはありません。 ぶら下がっているコミットはルートノードである可能性があります。

hash mismatch <object>

データベースに、ハッシュがオブジェクトデータベースの値と一致しないオブジェクトがあります。これは、深刻なデータ整合性の問題を示しています。

FSCK MESSAGES

以下に git fsck が検出するエラーの種類と各エラーの意味をデフォルトの重大度とともに示します。 「(FATAL)」とマークされているもの以外の重大度は、 対応する fsck.<msg-id> 構成変数を設定することで調整できます。

badDate

(ERROR) 作者(author)/コミッター 行の日付形式が無効です。

badDateOverflow

(ERROR) 作者(author)/コミッター 行の日付値が無効です。

badEmail

(ERROR) 作者(author)/コミッター 行の電子メールアドレス形式(email format)が無効です。

badFilemode

(INFO) ツリーに不正なファイル・モード・エントリが含まれています。

badName

(ERROR) 作者(author)/コミッター 名が空です。

badObjectSha1

(ERROR) オブジェクトは不正な sha1 です。

badParentSha1

(ERROR) コミット・オブジェクトには不正な親 sha1 があります。

badRefContent

(ERROR) ref の内容が不正です。

badRefFiletype

(ERROR) ref のファイル・タイプが不正です。

badRefName

(ERROR) ref の形式が無効です。

badReferentName

(ERROR) symref の参照先名(referent name)が無効です。

badTagName

(INFO) タグの形式が無効です。

badTimezone

(ERROR) 作者(author)/コミッター 行に無効なタイムゾーンが見つかりました。

badTree

(ERROR) ツリーをパースできません。

badTreeSha1

(ERROR) ツリーの形式が無効です。

badType

(ERROR) 無効なオブジェクト・タイプが見つかりました。

duplicateEntries

(ERROR) ツリーに重複したファイル・エントリが含まれています。

emptyName

(WARN) パスに空の名前が含まれています。

extraHeaderEntry

(IGNORE) tagger の後に余分なヘッダーが見つかりました。

fullPathname

(WARN) パスには "/" で始まるフル・パスが含まれています。

gitattributesBlob

(ERROR) .gitattributes で非ブロブが見つかりました。

gitattributesLarge

(ERROR) .gitattributes ブロブが大きすぎます。

gitattributesLineLength

(ERROR) .gitattributes ブロブに長い行が含まれています。

gitattributesMissing

(ERROR) .gitattributes ブロブを読み取れません。

gitattributesSymlink

(INFO) .gitattributes がシンボリックリンクです。

gitignoreSymlink

(INFO) .gitignore がシンボリックリンクです。

gitmodulesBlob

(ERROR) .gitmodules で非ブロブが見つかりました。

gitmodulesLarge

(ERROR) .gitmodules ファイルが大きすぎてパースできません。

gitmodulesMissing

(ERROR) .gitmodules ブロブを読み取れません。

gitmodulesName

(ERROR) サブモジュール名が無効です。

gitmodulesParse

(INFO) .gitmodules ブロブをパースできませんでした。

gitmodulesLarge

(ERROR) .gitmodules ブロブが大きすぎてパースできません。

gitmodulesPath

(ERROR) .gitmodules へのパスが無効です。

gitmodulesSymlink

(ERROR) .gitmodules がシンボリックリンクです。

gitmodulesUpdate

(ERROR) 無効なサブモジュール更新設定(submodule update setting)が見つかりました。

gitmodulesUrl

(ERROR) 無効なサブモジュール URL が見つかりました。

hasDot

(WARN) ツリーに "." という名前のエントリが含まれています。

hasDotdot

(WARN) ツリーに ".." という名前のエントリが含まれています。

hasDotgit

(WARN) ツリーに .git という名前のエントリが含まれています。

largePathname

(WARN) ツリーに非常に長いパス名のエントリが含まれています。 fsck.largePathname の値にコロンが含まれている場合、 その値が最大許容長として使用されます(たとえば warn:10 は 11 バイト以上のパス・コンポーネントについて警告します)。 デフォルト値は 4096 です。

mailmapSymlink

(INFO) .mailmap がシンボリックリンクです。

missingAuthor

(ERROR) 作者が行方不明です(Author is missing)。

missingCommitter

(ERROR) コミッターが見つかりません。

missingEmail

(ERROR) 作者(author)/コミッター 行に 電子メールアドレス(email)がありません。

missingNameBeforeEmail

(ERROR) 作者(author)/コミッター 行の電子メール(email)の前に名前がありません。

missingObject

(ERROR) タグ・オブジェクトに object 行がありません。

missingSpaceBeforeDate

(ERROR) 作者(author)/コミッター 行の日付の前に空白(space)がありません。

missingSpaceBeforeEmail

(ERROR) 作者(author)/コミッター 行の電子メール(email)の前に空白(space)がありません。

missingTag

(ERROR) タグ・オブジェクトの type 行の後ろで予期しない終了が発生しました。

missingTagEntry

(ERROR) タグ・オブジェクトに tag 行がありません。

missingTaggerEntry

(INFO) タグ・オブジェクトに tagger 行がありません。

missingTree

(ERROR) コミット・オブジェクトに tree 行がありません。

missingType

(ERROR) タグ・オブジェクトの type 行の type 値が無効です。

missingTypeEntry

(ERROR) タグ・オブジェクトに type 行がありません。

multipleAuthors

(ERROR) コミット内に複数の作者(author)行が見つかりました。

nulInCommit

(WARN) コミット・オブジェクト本体(body)に NUL バイトが見つかりました。

nulInHeader

(FATAL) オブジェクト・ヘッダーにNULバイトが存在します。

nullSha1

(WARN) ツリーに null sha1 を指すエントリが含まれています。

refMissingNewline

(INFO) newline(LF) で終わらない緩い ref(loose ref)。 Git の正常な実装ではそのような緩い ref ファイルは決して作成されないため、 これは将来的にはエラーになる可能性があります。 このエラーが表示された場合は、 どのツールがそのようなファイルを作成したかを知る必要があるため、 git@vger.kernel.org メーリング・リストに報告してください。

symlinkRef

(INFO) シンボリック・リンクは symref として使用されます。 このエラーが表示された場合は、 symref としてのシンボリック・リンクの作成のサポートを削除する可能性を評価しているため、 git@vger.kernel.org メーリング・リストに報告してください。

symrefTargetIsNotARef

(INFO) シンボリック参照(symbolic reference)のターゲットは、 ルート参照もも指しませんし refs/ で始まる参照も指しません。 gitsymbolic-ref を使用して ref の外側にある参照対象を指す symref を作成することは許可されていますが、 将来的にはこのルールが厳しくなる可能性があります。 このエラーが表示された場合は、 どのツールがそのようなファイルを作成したかを知る必要があるため、 git@vger.kernel.org メーリング・リストに報告してください。

trailingRefContent

(INFO) 緩い ref(loose ref)には末尾に続くコンテンツがあります。 Git の正常な実装ではそのような緩い ref ファイルは決して作成されないため、 将来的にはエラーになる可能性があります。 このエラーが表示された場合は、 どのツールがそのようなファイルを作成したかを知る必要があるため、 git@vger.kernel.org メーリング・リストに報告してください。

treeNotSorted

(ERROR) ツリーが適切にソートされていません。

unknownType

(ERROR) 不明なオブジェクト・タイプが見つかりました。

unterminatedHeader

(FATAL) オブジェクト・ヘッダーに end-of-line がありません。

zeroPaddedDate

(ERROR) 作者(author)/コミッター 行でゼロ・パディングされた日付が見つかりました。

zeroPaddedFilemode

(WARN) ツリー内でゼロ・パディングされたファイルモードが見つかりました。

Environment Variables

GIT_OBJECT_DIRECTORY

オブジェクトデータベースのルート(通常は $GIT_DIR/objects )を指定するために使用されます

GIT_INDEX_FILE

インデックスのインデックスファイルを指定するために使用されます

GIT_ALTERNATE_OBJECT_DIRECTORIES

追加のオブジェクトデータベースルートを指定するために使用されます(通常は未設定)

GIT

Part of the git(1) suite