SYNOPSIS
gitfsck
[--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.ui
やcore.editor
のような変数とは異なり、receive.fsck.
<msg-id> やfetch.fsck.
<msg-id> 変数は、設定されていない場合、fsck.
<msg-id> 構成にフォールバックしません。 さまざまな状況で同一のfsck設定を均一に構成するには、これら 3 つすべてを同一の値に設定する必要があります。fsck.
<msg-id> が設定されている場合、fsck.
<msg-id> の値をerror
、warn
、ignore
のいずれか一つとすることにより、エラーを警告に切り替える事もでき、その逆も可能です。そして <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.ui
やcore.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