174

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

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

yとnのどちらを選択しても、引っ張ったり押したりできる状態にはなりません。

4

18 に答える 18

206

これは通常、プロセスがまだその特定のファイルを使用していることを意味します(まだハンドルがあります)
(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 Hamanoによってマージされました---コミット5104f8f、2019年1月18日dscho
gitster

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

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

以前は、不要になったパックを削除git gcしたい場合に備えて、パックが生成される直前にリリースされるようにしました。gc

しかし、この開発者は、たとえばオプションgcを介してすべてのパックを統合する場合など、パック自体も手放す必要があることを忘れていました。--aggressive

同様に、git repack -d廃止されたパックを削除したいので、すべてのパックハンドルも閉じる必要があります。


2016年1月の更新

これはGit2.8(2016年3月)で修正されるはずです(以下のGit 2.19、2018年第3四半期を参照)

Johannes Schindelin()によるcommit d562102commit dcacb1bcommit df617b5commit 0898c96(2016年1月13日)を参照してください。( Junio C Hamanoによってマージされました---コミット3c80940、2016年1月26日dscho
gitster

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について言及しています( commit 2db0641):

一時ファイルハンドルが子プロセスに継承されていないことを確認してください


実際、上記のgit-for-windows問題500
は、2018年第3四半期のGit 2.19で実際に修正されています。 「Git-ファイルのリンクを解除し.idx.pack失敗しました(このファイルへの唯一のプロセス所有ハンドルはgit.exe」を参照してください。

于 2012-04-16T21:27:40.193 に答える
62

これはWindows固有の回答なので、あなたには関係がないことを認識しています...将来の検索者のために含めています。

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

于 2012-09-05T11:06:27.457 に答える
31

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

于 2014-06-04T19:44:52.737 に答える
5

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

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

GitHubGUIを閉じて解決しました。

于 2015-04-24T09:17:36.437 に答える
2

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

于 2014-05-30T10:31:22.973 に答える
2

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

于 2015-04-30T15:55:45.950 に答える
2

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

于 2016-07-28T06:37:13.850 に答える
1

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

UEが特定のファイルの古いバージョンを処理しているためか、Gitはそのファイルのリンクを解除できませんでした。

UltraEditを閉じた後、問題は二度と発生しませんでした。

于 2012-06-12T03:15:17.307 に答える
1

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

于 2012-08-28T13:35:09.670 に答える
1

上記の答えはどれも私にはうまくいきませんが、forceオプションを指定してgit gcコマンドを実行すると、私のケースは解決しました。

'git gc --force'

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

于 2019-02-01T11:08:54.260 に答える
0

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

アンロッカー

于 2013-03-01T04:22:51.220 に答える
0

私はこれをWindowsXPで発生させましたが、メッセージがループでスタックしていることと、返信することでクリアできることの両方があります。

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

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

以前の2人の投稿者がWindowsについて言及しており、他のオペレーティングシステムに問題があるとは誰も言っていないので、返信によってクリアできる問題はWindowsに関連しているのではないかと思います。

于 2013-12-05T14:03:11.887 に答える
0

PHPStormを開いて閉じて、すべてが順調でした。

于 2015-11-02T14:24:34.010 に答える
0

同じ問題が発生し、WindowTaskManagerから関連するすべてのプログラムを閉じました。しかし、それはまだ機能していませんでした。興味深いのは、「Gitpull」の代わりに「Gitrebase」を実行したところ、うまくいったことです。

于 2017-05-09T18:27:55.477 に答える
0

コマンドラインエディタを管理モードで実行して、コマンドを実行してみてください。それは問題を助け、解決します。:)

于 2019-10-16T13:34:42.407 に答える
0

私の場合、問題の原因となっているタグをプルーニングする古い方法がありました。オリジナルの設定を解除して解決しました。

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

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

git config --global fetch.pruneTags true
于 2019-11-07T17:04:21.263 に答える
0

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

于 2020-01-03T03:44:32.993 に答える
0

Windowsでも同じ問題が発生しました。Ubuntu VMでファイルにアクセスしているときに、Windowsでgcを実行しようとしました。Ubuntuのクローズドターミネーターとファイルエクスプローラーは私のために働いた。

于 2022-02-28T10:44:27.417 に答える