Git pullを実行しようとすると、次のエラーが表示されます。
ファイル 'lib/xxx.jar'のリンク解除に失敗しました。再試行する必要がありますか? (y/n)
Yまたはnを選択しても、プルまたはプッシュできる状態になることはできません。
それは通常、プロセスがまだその特定のファイルを使用していることを意味します(まだハンドルがあります)
(Windowsの場合、 ProcessExplorer
はその種のプロセスの追跡に適しています)
他のプログラムを閉じて、git pull
を再試行してください。
GIT_ASK_YESNO
変数 を使用する代替手段があることに注意してください。
2019年1月の更新:
Git 2.21(Q1 2019)では、「git gc
」および「git repack
」が不要なオープンパックファイルを削除する前に閉じなかったため、これをさらに修正する必要があり、オープンを削除できないプラットフォームでは機能しませんでしたファイル。
これは修正されました。
commit 5bdece (2018年12月15日)by Johannes Schindelin(dscho
) を参照してください。
( C浜野順夫-gitster
- in commit 5104f8f 、2019年1月18日)
gc
/repack
:必要なときにリリースパックWindowsでは、プロセスが保持しているハンドルがまだある場合、ファイルを削除したり名前を変更したりすることはできません。
それを改善するために、close_all_packs()
関数を導入しました。以前は、
gc
が不要になったパックを削除する場合に備えて、git gc
が生成される直前にパックがリリースされるようにしました。しかし、この開発者は
gc
自体もパックを手放す必要があることを忘れていました。--aggressive
オプションを使用してすべてのパックを統合する場合。同様に、
git repack -d
は廃止されたパックを削除するため、すべてのパックハンドルも閉じる必要があります。
2016年1月の更新
これはGit 2.8(2016年3月)で修正する必要があります(以下のGit 2.19、2018年第3四半期を参照)
commit d562102 、 commit dcacb1b 、 commit df617b5 、 commit 0898c96 (2016年1月13日)by ヨハネス・シンデリン(dscho
) 。
( Chamano Junio---gitster
- in commit 3c8094 、2016年1月26日)に合併)
fetch
:ガベージコレクションの前にリリースパックファイル自動gcを実行する前に、パックファイルを再パックしてガベージコレクションする必要がある場合に備えて、パックファイルがリリースされていることを確認する必要があります。
終了する前に「
gc --auto
」を実行する多くのコードパスは、パックファイルをマップしたままにし、ファイル記述子を開いたままにしました。これは、開いているファイルを削除できないシステムには使いません。
彼らはパックを閉じる前に閉じます。
git-for-widows
issue 5 が修正されました。
その新しいアプローチを検証するために使用されるテスト を見ると、可能な回避策は(Git 2.8がまだリリースされていないため)人為的にgc.autoPackLimit
を上げることです。
git config gc.autoPackLimit 10000
git fetch
git config gc.autoPackLimit 50 # default value
git 2.8.4(2016年6月) には言及されていません issue 755 これも問題を軽減する必要があります( commit 2db0641 ):
一時ファイルハンドルが子プロセスに継承されないようにする
実際、上記の git-for-windows
issue 5 は、Git 2.19、2018年第3四半期で本当に修正されました。
「 Git-ファイル.idx
および.pack
のリンク解除に失敗しました(このファイルのプロセス所有ハンドルはgit.exe
のみです) "
これはWindows固有の回答ですので、あなたには関係ないことは承知しています...将来の検索者の利益のためだけに含めています。
私の場合、Gitを非昇格コマンドラインから実行していたためです。 「管理者として実行」で修正されました。
私にとっては、Visual Studioがプルから変更されたすべてのファイルをリロードしようとしたためです。 Visual Studioを更新してから、git gc
を実行します。
GitHub for Windowsを使用するWindowsで、git gc
を実行すると、シェルで同様のエラーが発生しました。
Unlink of file '.git/objects/pack/pack-0b40ae7eae9b83edac62e19c07ff7b4c175244f6.idx' failed. Should I try again? (y/n)
GitHub GUIを閉じて解決しました。
一部のファイルがロックされている可能性があるため、Apacheまたは他のWebサーバーを再起動してください。
IDEを閉じてからgit pull
を実行します。それが動作します。
Visual StudioとRubymineを閉じたが、エラーは再び表示されなかった。それらの1つは犯人でした。
これは、私の場合、LESSコンパイラであるSimpLESSが原因でした。システムトレイで閉じる必要があります。
私もこの問題を抱えていますが、Eclipseワークスペースを整理および編集するためにUEを使用していたため、この方法がUltraEditであることがわかりました~~
UEが特定のファイルの古いバージョンを処理しているためか、Gitがリンクを解除できなかった可能性があります。
UltraEditを閉じた後、問題は二度と起こりませんでした。
Windows XPでこの問題が発生しました。メッセージがループに陥り、返信することでクリアできます。
Git-GUIを閉じることで、ループでスタックした状態が解消されました。 (bashシェルでgit merge -iを実行していました。)
他の発生は、おそらくリポジトリ内の多数のファイルが原因で発生しました。主に.codファイルで発生しましたが、後でバージョン管理から除外します。 (最初にそれらを追跡する理由があります。)原因は、Gitがファイルハンドルを使用するレートに関連している可能性があると思います。
以前の2人のポスターがWindowsに言及しており、他のオペレーティングシステムに問題があると言っている人はいないので、返信によって解決できる問題はWindowsに関連するのだろうか。
問題は、これらのファイルを処理するプログラムがあるためです。 Unlockerを使用して、それを処理しているプログラムを見つける必要があるという提案があります。
私はPHPStormを開いて閉じ、それを閉じました。
上記の答えはどれも私にとってはうまくいきませんが、強制オプションでgit gcコマンドを実行すると、問題が解決しました。
「git gc --force」
[Windows 7、管理者として実行=>コマンドプロンプト]
私は同じ問題を抱えていて、Window Task Managerから関連するプログラムをすべて閉じました。ただし、まだ機能していませんでした。興味深い部分は、「Git pull」の代わりに「Git rebase」を実行したことです。