1. ホーム
  2. windows

[解決済み] ファイルのアンリンクに失敗しました

2022-04-22 03:20:09

質問

git pullをしようとしているのですが、以下のエラーが発生します。

ファイル 'lib/xxx.jar' のアンリンクに失敗しました。もう一度試してみるべきですか?(y/n)

yを選んでもnを選んでも、引いたり押したりできる状態にならないのですが。

どうすればいいですか?

これは通常、あるプロセスがまだその特定のファイルを使用していることを意味します(まだハンドルがあります)。

(Windowsの場合。 ProcessExplorer はそのようなプロセスの追跡が得意です)

他のプログラムを終了し、もう一度 git pull .

という選択肢もあることに注意してください。 GIT_ASK_YESNO 変数 .


2019年1月更新

それが、Git 2.21 (2019年第1四半期) で、さらに修正されるはずです、" として。 git gc "と" git repack "は、不要と判断した開いているパックファイルを削除する前に閉じなかったので、開いているファイルを削除できないプラットフォームでは機能しませんでした。

これは修正されています。

参照 コミット 5bdece0 (2018年12月15日)によるものです。 ヨハネス・シンデリン( dscho ) .

(によって統合されました。 ジュニオ・C・ハマノ--。 gitster -- コミット 5104f8f , 2019年1月18日)

<ブロッククオート

gc / repack : 必要に応じてリリースパックを提供

Windowsでは、プロセスによって保持されているハンドルがある場合、ファイルを削除したり名前を変更したりすることはできません。

それを改善するために、私たちは close_all_packs() という関数があります。

先ほど、パックがリリースされる直前の git gc がスポーンされた場合に備えて gc は、不要になったパックを削除することを望んでいます。

しかし、この開発者は、以下のことを忘れていました。 gc を経由してすべてのパックを統合する場合など、パック自体を手放す必要があります。 --aggressive オプションで指定します。

同じく。 git repack -d は古くなったパックを削除したいので、すべてのパックハンドルも閉じる必要があります。


2016年1月更新

Git 2.8(2016年3月)で修正されるはずです(下記のGit 2.19, Q3 2018も参照)。

参照 コミットd562102 , コミット dcacb1b , コミット df617b5 , コミット 0898c96 (2016年1月13日)によるものです。 ヨハネス・シンデリン( dscho ) .

(によって統合されました。 ジュニオ・C・ハマノ--。 gitster -- コミット3c80940 , 2016年1月26日)

<ブロッククオート

fetch : ガベージコレクションの前にリリースされるパックファイル

自動gcを行う前に、再パックやガベージコレクトが必要な場合に備えて、パックファイルの解放を確認する必要があります。

を実行する多くのコードパスがあります。 gc --auto これは、開いているファイルを削除できないシステムにとって不親切でした。

現在は、パックを閉じてから行うようになりました。

これで解決 git-for-widows 問題点500 .

を見てみると その新しいアプローチを検証するために使用されるテスト を使うことで、(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 ) "