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


169

git pullを実行しようとすると、次のエラーが発生します。

ファイル「lib / xxx.jar」のリンク解除に失敗しました。もう一度やり直しますか?(はい/いいえ)

yとnのどちらを選択しても、プルまたはプッシュできる状態にすることはできません。


そのファイルに書き込む権限があるかどうかを確認しましたか?
Raphael Michel

1
chmodおよび/またはchown上記のファイルを実行します。
Not_a_Golfer 2012

私には権利があるべきです、そうでなければ私はそれをchown / chmodします!
marko


回答:


204

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


5
ほとんどの場合、そのjarファイルを使用して実行されているJVMがあります。
–ThorbjørnRavn Andersen 2012

2
私の場合はスカイプでした。以前にファイルを他の人に転送しましたが、一部はまだ承認またはキャンセルされていません。
Vivek Kodira 2013

6
Windowsエクスプローラーが原因であることがわかりました。TortoiseGitのアイコンオーバーレイまたはTGitCacheが原因であると考えられます。開いているすべてのフォルダーを閉じるとうまくいきますが、プロジェクトフォルダーが開いている場合にのみ、プロジェクトフォルダーを閉じる必要があります。
Allan Bogh 2014

4
私の場合、オープンソリューションにバインドされていたため、VS2013でした。
BrotherOdin 2014年

2
Explorer.exeが問題でした-TortoiseGitがありません。タスクマネージャーからexplorer.exeを終了し、CTRL-ALT-DELETE =>タスクマネージャー=>ファイル=>ファイルを実行=> "explorer.exe"(引用符なし)
joehanna

57

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

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


4
Windows 7でプルを実行し、Gitが自動パックを実行したときに、この問題が発生しました。「idx」ファイルに不満がありました。次に、管理者としてコンソールウィンドウを開き、git gcを実行しましたが、問題はありませんでした。したがって、これは良い解決策です。
grahamesd 2014

1
git gcはWindows 7で私のためにそれを行いました。WebStormでプッシュを行っている間にcmderでgit pullを実行していたのですが
Alessandro

2
ワオ。NeilDに感謝します。私も修正しました。GITをもう少しWindowsに移植するとよいでしょう。
MartinDobšík2016年

まあ...それは6年前に必要でした。今?知るか?_(ツ)_ /¯
NeilD

30

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


3
私も同じです。git gcを実行する前に、Eclipseを閉じる必要がありました。
アルフォク

5

WindowsでGitHub for Windowsを使用している場合、実行中にシェルで同様のエラーが発生しましたgit gc

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

GitHub GUIを閉じることで解決しました。



2

Visual StudioとRubymineを終了しましたが、再びエラーは発生しませんでした。それらの1つは犯人でした。



1

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

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

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



0

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

ロック解除者


0

私はこれをWindows XPで発生させました。メッセージはループでスタックし、返信することでクリアできます。

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

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

以前の2人の投稿者がWindowsについて言及しており、他のオペレーティングシステムに問題があるとは誰も言っていないので、回答によって解決できる問題はWindowsに関連しているのでしょうか。



0

同じ問題が発生し、関連するすべてのプログラムをウィンドウタスクマネージャーから閉じました。しかし、それはまだ機能していませんでした。興味深いのは、「Git pull」の代わりに「Git rebase」を実行して、うまくいったことです。


0

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

「git gc --force」

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



0

私の場合、問題を引き起こす古いタグのプルーニング方法がありました。オリジナルの設定を解除することで解決しました:

git config --global --unset remote.origin.fetch '\+refs/tags/\*:refs/tags/\*'

次にこれを追加して、サーバー上の削除されたブランチをプルーニングします。

git config --global fetch.pruneTags true

0

私は同じエラーに直面し、ファイルが使用されていたときにEclipseを閉じて再度プルすることで解決しました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.