web-dev-qa-db-ja.com

ファイルのリンク解除に失敗しました

Git pullを実行しようとすると、次のエラーが表示されます。

ファイル 'lib/xxx.jar'のリンク解除に失敗しました。再試行する必要がありますか? (y/n)

Yまたはnを選択しても、プルまたはプッシュできる状態になることはできません。

165
marko

それは通常、プロセスがまだその特定のファイルを使用していることを意味します(まだハンドルがあります)
(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 d562102commit dcacb1bcommit df617b5commit 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のみです) "

199
VonC

これはWindows固有の回答ですので、あなたには関係ないことは承知しています...将来の検索者の利益のためだけに含めています。

私の場合、Gitを非昇格コマンドラインから実行していたためです。 「管理者として実行」で修正されました。

56
NeilD

私にとっては、Visual Studioがプルから変更されたすべてのファイルをリロードしようとしたためです。 Visual Studioを更新してから、git gcを実行します。

26
Paul Nikonowicz

GitHub for Windowsを使用するWindowsで、git gcを実行すると、シェルで同様のエラーが発生しました。

Unlink of file '.git/objects/pack/pack-0b40ae7eae9b83edac62e19c07ff7b4c175244f6.idx' failed. Should I try again? (y/n)

GitHub GUIを閉じて解決しました。

5
Garrett Smith

一部のファイルがロックされている可能性があるため、Apacheまたは他のWebサーバーを再起動してください。

2
Arvind Bhardwaj

IDEを閉じてからgit pullを実行します。それが動作します。

2

Visual StudioとRubymineを閉じたが、エラーは再び表示されなかった。それらの1つは犯人でした。

2
Bikey

これは、私の場合、LESSコンパイラであるSimpLESSが原因でした。システムトレイで閉じる必要があります。

1

私もこの問題を抱えていますが、Eclipseワークスペースを整理および編集するためにUEを使用していたため、この方法がUltraEditであることがわかりました~~

UEが特定のファイルの古いバージョンを処理しているためか、Gitがリンクを解除できなかった可能性があります。

UltraEditを閉じた後、問題は二度と起こりませんでした。

0
Ruobin Wang

Windows XPでこの問題が発生しました。メッセージがループに陥り、返信することでクリアできます。

Git-GUIを閉じることで、ループでスタックした状態が解消されました。 (bashシェルでgit merge -iを実行していました。)

他の発生は、おそらくリポジトリ内の多数のファイルが原因で発生しました。主に.codファイルで発生しましたが、後でバージョン管理から除外します。 (最初にそれらを追跡する理由があります。)原因は、Gitがファイルハンドルを使用するレートに関連している可能性があると思います。

以前の2人のポスターがWindowsに言及しており、他のオペレーティングシステムに問題があると言っている人はいないので、返信によって解決できる問題はWindowsに関連するのだろうか。

0
Ivan

問題は、これらのファイルを処理するプログラムがあるためです。 Unlockerを使用して、それを処理しているプログラムを見つける必要があるという提案があります。

ロック解除

0
Envil

私はPHPStormを開いて閉じ、それを閉じました。

0
Tisch

上記の答えはどれも私にとってはうまくいきませんが、強制オプションでgit gcコマンドを実行すると、問題が解決しました。

「git gc --force」

[Windows 7、管理者として実行=>コマンドプロンプト]

0
Juha Hanka

私は同じ問題を抱えていて、Window Task Managerから関連するプログラムをすべて閉じました。ただし、まだ機能していませんでした。興味深い部分は、「Git pull」の代わりに「Git rebase」を実行したことです。

0
In-young Choung