テクノロジー · 実用ガイド

Git の index.lock が存在する?削除前に所有者を確認する

ロックは実行中の Git、クラッシュの残骸、再作成するフックや IDE、または書き込めないリポジトリに由来します。実際のパスと保持プロセスを確認し、ステージ状態を保存してから、証明できた境界だけを修復します。

Git index.lock の特定、観察、分類、修復を示すオリジナルイラスト。
オリジナルイラスト:削除前に実パスと所有者を確認します。 Watch at Ease

index.lock は Git がインデックスを更新するための保護で、即座に削除するごみではありません。同じエラーでも、生きた書き込み、クラッシュ残骸、再作成、原子的な置換失敗があります。

実パス、ステージ状態、保持者、再発、書き込み可能性の順に証拠を集め、狭い修復を一度だけ行います。

状態を保存し、実際のロックパスを解決する

完全なエラー、git status、git diff --cached --stat を保存します。.git/index は削除しません。git rev-parse --path-format=absolute --git-path index.lock で実際のパスを取得します。

存在、所有者、権限、サイズ、更新時刻を記録します。Git は index.lock を使って新しいインデックスを構築し、確定またはロールバックします。

所有または再作成するプロセスを確認する

Linux/macOS は lsof、Windows は Process Explorer または Handle で正確なパスを検索します。停止前にプロセス、利用者、親プロセスを確認します。

保持者がいない場合は一度だけ再試行を観察します。すぐ戻るロックは IDE、フック、監視処理、重複した Git コマンドの証拠です。

確認済みの古いロックだけを削除する

実パスが正しく、保持者がなく、元の処理が終了し、すぐ再作成されない場合だけ stale と判断します。削除対象はその index.lock だけです。

git status の後に元の書き込みを一度実行し、ロック消失と git diff --cached の意図した内容を確認します。

権限と unlink の失敗を別原因として扱う

作成、rename、unlink に失敗するなら、Git ディレクトリの所有権、書き込み可能性、ファイルシステムを同じ利用者で調べます。

sudo git や広範な chown を一般解にしません。証拠が示す所有者、マウント、ウイルス対策、ポリシーの境界だけを直します。

再現可能な確認で終了する

一つの端末から元の書き込みを実行し、終了コード、ロック消失、status、cached diff を確認します。

自動化では同じインデックスへの書き込みを直列化し、開始・終了・リポジトリパスを記録します。

実行中の書き込みと所有者のいない古いロックを分けるオリジナルイラスト。
オリジナルイラスト:実行中、古い、書き込めないロックでは修復が異なります。 Watch at Ease