git pullを実行しようとすると、次のエラーが発生します。
ファイル「lib / xxx.jar」のリンク解除に失敗しました。もう一度やり直しますか?(はい/いいえ)
yとnのどちらを選択しても、プルまたはプッシュできる状態にすることはできません。
chmod
および/またはchown
上記のファイルを実行します。
git pullを実行しようとすると、次のエラーが発生します。
ファイル「lib / xxx.jar」のリンク解除に失敗しました。もう一度やり直しますか?(はい/いいえ)
yとnのどちらを選択しても、プルまたはプッシュできる状態にすることはできません。
chmod
および/またはchown
上記のファイルを実行します。
回答:
これは通常、プロセスがその特定のファイルをまだ使用していることを意味します(まだハンドルがあります)
(Windowsでは、ProcessExplorer
その種のプロセスの追跡に優れています)。
他のプログラムを閉じて、もう一度やり直してくださいgit pull
。
GIT_ASK_YESNO
変数を使用した代替案があることに注意してください。
2019年1月の更新:
Git 2.21(2019年第1四半期)では、「git gc
」と「git repack
」が、不要なファイルを削除する前にそれらを閉じなかったため、さらに修正する必要があります。これは、開いているファイルを削除できないプラットフォームでは機能しませんでした。
これは修正されました。
Johannes Schindelin()によるcommit 5bdece0(2018年12月15日)を参照してください。(合併によりJunio C浜野- -で5104f8fコミット 2019年1月18日)dscho
gitster
gc
/repack
:必要に応じてパックをリリースWindowsでは、プロセスによって保持されているハンドルがまだある場合、ファイルを削除したり名前を変更したりすることはできません。
これを改善するために、close_all_packs()
関数。以前は、その
git gc
場合に備えて、パックがスポーンされる直前にリリースされることを確認しましたgc
不要になったパックを削除たい。しかし、この開発者は
gc
、たとえば--aggressive
オプションですべてのパックを統合する場合など、パック自体を手放す必要があることを忘れていました。同様に、
git repack -d
古いパックを削除したいので、すべてのパックハンドルも閉じる必要があります。
2016年1月の更新
これはGit 2.8(2016年3月)で修正される予定です(以下のGit 2.19、2018年第3四半期を参照)。
Johannes Schindelin()によるcommit d562102、commit dcacb1b、commit df617b5、commit 0898c96(13 Jan 2016)を参照してください。(合併によりJunio C浜野- -で3c80940コミットし、2016年1月26日)をdscho
gitster
fetch
:ガベージコレクションの前にパックファイルを解放する自動gcを実行する前に、パックファイルを再パックしてガベージコレクションする必要がある場合に備えて、パックファイルがリリースされていることを確認する必要があります。
gc --auto
終了する前に" " を実行する多くのコードパスは、パックファイルをマップしたままにし、ファイル記述子を開いたままにしました。これは、開いているファイルを削除できないシステムには適していませんでした。
彼らは今、そうする前にパックを閉じます。
それは問題500を修正しますgit-for-widows
ます。
その新しいアプローチを検証するために使用されるテストを見ると、可能な回避策(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月)は問題755について言及していますが、これも問題を軽減するはずです(コミット2db0641):
一時ファイルハンドルが子プロセスに継承されないようにする
実際には、git-for-windows
問題500上記は本当にGitの2.19、Q3 2018で固定されている
「を参照してください-ファイルのリンク解除のGit .idx
と.pack
(唯一のプロセスが、このファイルへのハンドルを所有していませんでしたgit.exe
)」
これはWindows固有の回答です。したがって、あなたには関係ないことは承知しています...私は将来の検索者のために含めるだけです。
私の場合は、昇格していないコマンドラインからGitを実行していたためです。「管理者として実行」で修正されました。
私にとっては、Visual Studioが変更されたすべてのファイルをプルからリロードしようとしたためです。Visual Studioを更新してから、実行しgit gc
ます。
一部のファイルがロックされている可能性があるため、Apacheまたは他のWebサーバーを再起動してください。
IDEを閉じてくださいgit pull
。それが動作します。
これは私の場合、LESSコンパイラであるSimpLESSが原因でした。システムトレイで閉じる必要があります。
私はこれをWindows XPで発生させました。メッセージはループでスタックし、返信することでクリアできます。
スタックしたループの発生は、Git-GUIを閉じることで解消されました。(私はbashシェルでgit merge -iを実行していました。)
他の出来事は、おそらく私のリポジトリにある多数のファイルが原因で起こりました。これは主に.codファイルで発生し、後でバージョン管理から除外しました。(最初にそれらを追跡する理由はあります。)原因は、Gitがファイルハンドルを使用する速度に関連している可能性があると思います。
以前の2人の投稿者がWindowsについて言及しており、他のオペレーティングシステムに問題があるとは誰も言っていないので、回答によって解決できる問題はWindowsに関連しているのでしょうか。
コマンドラインエディターを管理モードで実行して、コマンドを実行してください。問題の解決に役立ちます。:)