Git
English ▾ トピック ▾ 最新バージョン ▾ git-fsck は 2.47.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] [<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 および代替オブジェクトプール内の対応する pack サブディレクトリにあるパックされた Git アーカイブ内にあるオブジェクトもチェックします。これは現在のデフォルトです。 --no-full で無効にできます。

--connectivity-only

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

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

--strict

より厳格なチェックを有効にします。具体的には、古いバージョンの Git によって作成された、g+w ビットが設定されているファイルモードをキャッチします。Linux カーネル、Git 自体、スパースリポジトリを含む既存のリポジトリには、このチェックをトリガーする古いオブジェクトがありますが、新しいプロジェクトではこのフラグでチェックすることをお勧めします。

--verbose

詳細な情報を表示します。

--lost-found

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

--name-objects

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

--[no-]progress

標準エラーストリームに進行状況が表示されます(デフォルト)。ただし、標準エラーストリームがターミナルに接続されていない場合、または --no-progress または --verbose が指定されている場合は表示されません。--progress を指定すると、標準エラーストリームがターミナルに接続されていない場合でも、進行状況が表示されます。

設定

このセクションのこの行以降は、git-config[1] ドキュメントから選択的に含まれています。内容は同じです。

fsck.<msg-id>

fsck の実行中に、現在のバージョンの git では生成されず、transfer.fsckObjects が設定されている場合もワイヤ経由で送信されないレガシーデータに関する問題が見つかる場合があります。この機能は、このようなデータを含むレガシーリポジトリの使用をサポートすることを目的としています。

fsck.<msg-id> を設定すると、git-fsck[1] で取得されますが、このようなデータの push を受け入れるには、代わりに 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> が設定されている場合、<msg-id> が fsck メッセージ ID で、値が errorwarn、または ignore のいずれかである fsck.<msg-id> 設定を構成することで、エラーを警告に切り替えることができます。便宜上、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 メッセージ」セクションを参照してください。

fsck.skipList

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

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

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

color.uicore.editor のような変数とは異なり、receive.fsck.skipListfetch.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]を参照してください。

抽出された診断情報

unreachable <type> <object>

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

missing <type> <object>

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

dangling <type> <object>

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

hash mismatch <object>

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

FSCKメッセージ

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

badDate

(ERROR) 著者/コミッター行に無効な日付形式があります。

badDateOverflow

(ERROR) 著者/コミッター行に無効な日付値があります。

badEmail

(ERROR) 著者/コミッター行に無効なメール形式があります。

badFilemode

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

badName

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

badObjectSha1

(ERROR) オブジェクトに無効なsha1があります。

badParentSha1

(ERROR) コミットオブジェクトに無効な親sha1があります。

badRefFiletype

(ERROR) refに無効なファイルタイプがあります。

badRefName

(ERROR) refに無効な形式があります。

badTagName

(INFO) タグに無効な形式があります。

badTimezone

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

badTree

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

badTreeSha1

(ERROR) ツリーに無効な形式があります。

badType

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

duplicateEntries

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

emptyName

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

extraHeaderEntry

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

fullPathname

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

gitattributesBlob

(ERROR) .gitattributesにblob以外のオブジェクトが見つかりました。

gitattributesLarge

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

gitattributesLineLength

(ERROR) .gitattributes blobに長すぎる行が含まれています。

gitattributesMissing

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

gitattributesSymlink

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

gitignoreSymlink

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

gitmodulesBlob

(ERROR) .gitmodulesにblob以外のオブジェクトが見つかりました。

gitmodulesLarge

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

gitmodulesMissing

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

gitmodulesName

(ERROR) サブモジュール名が不正です。

gitmodulesParse

(INFO) .gitmodules blobを解析できませんでした。

gitmodulesLarge; (ERROR) .gitmodules blobが大きすぎて解析できません。

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) 著者情報がありません。

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行がありません。

missingType

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

missingTypeEntry

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

multipleAuthors

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

nulInCommit

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

nulInHeader

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

nullSha1

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

treeNotSorted

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

unknownType

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

unterminatedHeader

(FATAL) オブジェクトヘッダーに改行がありません。

zeroPaddedDate

(ERROR) 著者/コミッター行にゼロ埋めされた日付が見つかりました。

zeroPaddedFilemode

(WARN) ツリーにゼロ埋めされたファイルモードが見つかりました。

環境変数

GIT_OBJECT_DIRECTORY

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

GIT_INDEX_FILE

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

GIT_ALTERNATE_OBJECT_DIRECTORIES

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

GIT

git[1]スイートの一部です。

scroll-to-top