おすすめアイテムをいくつか紹介

広告ブロックがONになっていると表示されないことがあります。

【Git】index.lockのせいでコミット・プッシュ等が出来なくなった時の対処方法

お疲れ様です。
はるさらと申します。

今回はGitについての
記事となります。

index.lockファイルが影響して
clone,pushができなくなり
悩んだことがありましたので
対処方法を記載しておきます。

結論としては
index.lockファイルを削除すれば
それで解決するのですが


注意点ちょっとした
コツ
が必要でしたので
index.lockファイルの消し方を
備忘録として残しておきます。

事象

仕事中にGitを使って
プロジェクトをクローン(チェックアウト)
する際に

git checkout staging
fatal: Unable to create ‘パス/.git/index.lock’:File exists.

のようなエラーが出てしまい
クローン出来ないことがありました。

index.lock’ ファイルが存在します
といったエラーが表示されている方も
同事象となりますので
続きを読んでいただけると幸いです。

原因

エラー文にもある通り
記載されているパスの中に
「index.lock」ファイル
既に存在しているため
処理が失敗してしまっていました。

index.lockとは何か

Pushなどを妨げてしまっている
index.lockファイルですが、
実は大切な役割をしています。

インデックスを編集する Git コマンドを実行すると、
Git によって新しい index.lock ファイルが作成され、
変更が書き込されてから、
ファイルの名前が変更されます。
index.lock ファイルは、
リポジトリが編集のためにロックされていることを
他の Git プロセスに示します。


※下記サイトより引用
https://docs.microsoft.com/ja-jp/azure/devops/repos/git/git-index-lock?view=azure-devops

つまり、Gitを使用して
作業を行っている際に
同時に同環境に更新が行われないように
index.lockファイルが作成され
ロックをかけてくれています。

そのため、もしGitを使って
多重作業をされているのであれば、
先に動かしたタスクが
完了するまで待ちましょう。
作業が終われば自動的に削除されます。

ただし、前タスクがフリーズや、
タスクキルによって
強制終了されてしまうと
index.lockファイルが残ったままに
なってしまうことがあります。

そうなった場合にこれから記載する方法で
index.lockファイルを削除してあげてください。

対処法

記事の冒頭で
index.lockファイルを削除すれば
解決と記載したのですが


エラーの出たパスをエクスプローラ上で
見に行ってもindex.lockファイルは
見えないようになっています。

そのため存在しない? 消せない??と
思ってしまうのですが、
コマンドプロンプトから
確認、削除が可能になります。

手順① cmdで対象のパスまで遷移

cmd(コマンドプロンプト)を開き
cdコマンドで対象のフォルダへ移動。

今回は「C:\Users\reclo\Desktop\work\.git」フォルダ内に
index.lockファイルが作成された
想定で実施していきます。

エラー文にあるパスに移動する

手順② index.lockファイルの存在を確認

dirコマンドを使って
移動したフォルダ内に
「index.lock」が存在すること
確認します。

index.lockファイルの存在を確認

エクスプローラー(フォルダ)上では
隠しファイルとなっており
見つけられなかったとしても
cmdにて表示されていれば
index.lockファイルは存在しています。

手順③ index.lockファイルの削除

index.lockファイルの存在を確認したら
delコマンドを使用して
「index.lock」を
削除しましょう。

del index.lock を実施

これでindex.lockファイルが
削除されましたので
再度、プッシュしかり
クローンしかり
試してみて下さい。

index.lockファイルのまとめ

仕事中に何らかの操作をした際に
「あ、まちがえた」と思い、
×で消してしまったことがあるんですよ。

pull,push以外の動作だったと思うのですが
それでも、index.lockファイルが作成され
少し苦戦してしまいました。

なんにせよ
強制終了はダメですね。。
以後、気を付けようと思います・・・。

それではまたー!