日本語 ▾ トピック ▾ 最新バージョン ▾ git-fsck は 2.50.0 で最終更新

名前

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>

到達不能トレースのヘッドとして扱うオブジェクト。

オブジェクトが指定されていない場合、git fsck はデフォルトでインデックスファイル、refs 名前空間内のすべての SHA-1 参照、およびすべての reflog (--no-reflogs が指定されていない限り) をヘッドとして使用します。

--unreachable

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

--[no-]dangling

存在するが、_直接_使用されていないオブジェクトを出力します (デフォルト)。この情報を出力から除外するには、--no-dangling を使用できます。

--root

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

--tags

タグを報告します。

--cache

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

--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 自体、スパースリポジトリを含む既存のリポジトリには、このチェックをトリガーする古いオブジェクトがありますが、このフラグを使用して新しいプロジェクトをチェックすることをお勧めします。

--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 は、標準エラー出力ストリームがターミナルに接続されていない場合でも進捗状況を強制します。

--[no-]references

git refs verify を介して参照データベースの整合性をチェックするかどうかを制御します。git-refs[1] を参照してください。デフォルトでは参照データベースをチェックします。

設定

このセクションのこの行より下のすべての内容は、git-config[1] ドキュメントから選択的に含まれています。内容はそちらで見られるものと同じです。

fsck.<msg-id>

fsck の実行中に、現在のバージョンの Git では生成されない、また transfer.fsckObjects が設定されている場合は送受信されない、古いデータに関する問題が Git で見つかることがあります。この機能は、そのようなデータを含む古いリポジトリでの作業をサポートすることを目的としています。

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> 設定を構成することで、エラーを警告に切り替えたり、その逆を行うことができます。<msg-id> は fsck メッセージ ID であり、値は errorwarn、または ignore のいずれかです。便宜上、fsck はエラー/警告の前にメッセージ ID をプレフィックスとして付けます。たとえば、"missingEmail: invalid author/committer line - missing email" は、fsck.missingEmail = ignore を設定すると、その問題が非表示になることを意味します。

一般的に、問題のあるオブジェクトが共有する破損の種類を無視するようにリストする代わりに、fsck.skipList を使用して問題のある既存のオブジェクトを列挙する方が良いでしょう。後者を行うと、同じ破損の新しいインスタンスが見過ごされる可能性があるためです。

未知の fsck.<msg-id> 値を設定すると fsck は停止しますが、receive.fsck.<msg-id> および fetch.fsck.<msg-id> の場合、Git は警告するだけです。

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

fsck.skipList

致命的ではない方法で破損していることがわかっており、無視すべきオブジェクト名のリストへのパス (つまり、1 行に 1 つの省略されていない SHA-1)。Git 2.20 以降のバージョンでは、コメント (#)、空行、および先頭と末尾の空白は無視されます。古いバージョンでは、1 行の SHA-1 以外のすべてがエラーになります。

この機能は、無効なコミッターのメールアドレスなど、安全に無視できるエラーを含む初期コミットにもかかわらず、確立されたプロジェクトを受け入れる必要がある場合に役立ちます。注: この設定では破損したオブジェクトをスキップすることはできません。

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 以降ではハッシュ実装が使用されているため、リストを事前にソートする必要はなくなりました。

考察

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

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

core.commitGraph が true の場合、コミットグラフファイルも git commit-graph verify を使用して検査されます。git-commit-graph[1] を参照してください。

抽出された診断

到達不能 <type> <object>

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

欠落 <type> <object>

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

ぶら下がり <type> <object>

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

ハッシュ不一致 <object>

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

FSCK メッセージ

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

badDate

(ERROR) author/committer 行の無効な日付形式。

badDateOverflow

(ERROR) author/committer 行の無効な日付値。

badEmail

(ERROR) author/committer 行の無効なメールアドレス形式。

badFilemode

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

badName

(ERROR) author/committer 名が空です。

badObjectSha1

(ERROR) オブジェクトの SHA1 が不正です。

badPackedRefEntry

(ERROR) "packed-refs" ファイルに無効なエントリが含まれています。

badPackedRefHeader

(ERROR) "packed-refs" ファイルに無効なヘッダが含まれています。

badParentSha1

(ERROR) コミットオブジェクトの親 SHA1 が不正です。

badRefContent

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

badRefFiletype

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

badRefName

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

badReferentName

(ERROR) シンボリック参照の参照名が無効です。

badTagName

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

badTimezone

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

badTree

(ERROR) ツリーを解析できません。

badTreeSha1

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

badType

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

duplicateEntries

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

emptyName

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

emptyPackedRefsFile

(INFO) "packed-refs" ファイルが空です。このエラーが発生した場合は、git@vger.kernel.org メーリングリストに報告してください。ごく初期のバージョンの Git のみがそのような空の "packed_refs" ファイルを作成したため、将来的にはこの規則を厳格化する可能性があります。

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) 無効なサブモジュール更新設定が見つかりました。

gitmodulesUrl

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

hasDot

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

hasDotdot

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

hasDotgit

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

largePathname

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

mailmapSymlink

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

missingAuthor

(ERROR) Author が欠落しています。

missingCommitter

(ERROR) Committer が欠落しています。

missingEmail

(ERROR) author/committer 行にメールアドレスが欠落しています。

missingNameBeforeEmail

(ERROR) author/committer 行のメールアドレスの前に名前が欠落しています。

missingObject

(ERROR) タグオブジェクトに object 行が欠落しています。

missingSpaceBeforeDate

(ERROR) author/committer 行の日付の前にスペースが欠落しています。

missingSpaceBeforeEmail

(ERROR) author/committer 行のメールアドレスの前にスペースが欠落しています。

missingTag

(ERROR) タグオブジェクトの type 行の後に予期しない終わり。

missingTagEntry

(ERROR) タグオブジェクトに tag 行が欠落しています。

missingTaggerEntry

(INFO) タグオブジェクトに tagger 行が欠落しています。

missingTree

(ERROR) コミットオブジェクトに tree 行が欠落しています。

missingType

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

missingTypeEntry

(ERROR) タグオブジェクトに type 行が欠落しています。

multipleAuthors

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

nulInCommit

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

nulInHeader

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

nullSha1

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

packedRefEntryNotTerminated

(ERROR) "packed-refs" ファイルに改行で終了していないエントリが含まれています。

packedRefUnsorted

(ERROR) "packed-refs" ファイルがソートされていません。

refMissingNewline

(INFO) 改行 (LF) で終わらないルーズ参照。有効な Git 実装ではこのようなルーズ参照ファイルは作成されなかったため、将来的にはエラーになる可能性があります。このようなファイルを作成したツールを知る必要があるため、このエラーが発生した場合は git@vger.kernel.org メーリングリストに報告してください。

symlinkRef

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

symrefTargetIsNotARef

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

trailingRefContent

(INFO) ルーズ参照に末尾のコンテンツがあります。有効な Git 実装ではこのようなルーズ参照ファイルは作成されなかったため、将来的にはエラーになる可能性があります。このようなファイルを作成したツールを知る必要があるため、このエラーが発生した場合は git@vger.kernel.org メーリングリストに報告してください。

treeNotSorted

(ERROR) ツリーが正しくソートされていません。

unknownType

(ERROR) 未知のオブジェクトタイプが見つかりました。

unterminatedHeader

(FATAL) オブジェクトヘッダに改行コードが欠落しています。

zeroPaddedDate

(ERROR) author/committer 行にゼロパディングされた日付が見つかりました。

zeroPaddedFilemode

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

環境変数

GIT_OBJECT_DIRECTORY

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

GIT_INDEX_FILE

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

GIT_ALTERNATE_OBJECT_DIRECTORIES

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

GIT

git[1]スイートの一部

scroll-to-top