Git gcを実行すると、次のエラーが表示されます。
rm: cannot unlink 'pack-30b1ff2[reset of hash].pack': Permission denied
このエラーについて何ができますか/すべきですか?
更新
申し訳ありませんが、もっと情報を提供する必要がありました。はい、再起動しました。実際、再起動により、以前はgcの問題が修正されました。
私がこの問題に気付いたのは、Git Guiを開くと、データベースを圧縮するようにときどき要求されるためです。最終的に、Git Guiを数回開いた後、[はい]をクリックしても、プロンプトが表示され続け、「成功」したことに気付きました。
そこで、Git EXTの設定-Gitメンテナンス-圧縮gitデータベースコマンドで実行してみました。このコマンドは、エラーが発生したことを教えてくれました(Git EXTでは赤信号でしたが、Git Guiでは緑信号がありました)。
上記で投稿したエラーは、ただしgit bashから直接git gcを実行した場合のものです。
ディスクスキャンをスケジュールする必要がありますか?不良セクターがこれを引き起こしているのでしょうか?これが簡単な答えになることを望んでいました:(
Windowsで「アクセスが拒否されました」は、多くの場合、実行中のプロセスからのロックが原因です。ストールしたGit EXTスレッドがパックファイルを開いた可能性があります。
git gc
セーフモード。
別のオプションは、リポジトリを新しい場所に複製し、古いものを削除することです。
私の場合はTortoiseGitでした。この問題を解決するために、TortoiseGit設定->アイコンオーバーレイを開き、ステータスキャッシュを「なし」に設定しました。これでプロセスTGitCacheが終了し、すべてのオブジェクトがgit gcで処理できるように「解放」されます。
コマンドをロックしたコマンドが発生したコンソールを閉じる必要があります。これは、ファイルをロックしているVIまたは強制終了されたコマンドである可能性があります。最も簡単な解決策は、すべてを閉じて再度開くことです。問題なくコマンドを実行できるはずです。
Git 2.23(2019年第3四半期)では、必要な情報を事前に計算して保存するコミットグラフ( がGit 2.18 で導入)のため、gc
中に権限拒否の問題を回避する必要があります。グラフウォーキングを最適化するための別のファイルでの祖先トラバーサル。
Git 2.23では、コミットグラフファイルは、「ランタイムがファイル記述子を開いたままにする可能性があるファイルであり、オブジェクトストアを使用したときにすべて閉じる必要があるファイル」の一部であり、既存のコミットへのファイル記述子-グラフファイルが閉じられましたbefore "gc"は新しいインスタンスをファイナライズして置き換えます。
commit 2d511cf 、 commit 5472c32 、 commit c3a3a96 (2019年5月17日)を参照 Derrick Stolee(derrickstolee
) によって。
( Junio C Hamano-gitster
- in commit 5cb7c73 、2019年7月9日)によってマージされました)
packfile
:_close_all_packs
_のコミットグラフを閉じる
close_all_packs()
メソッドは、 '_git gc --auto
_'を実行する前に、パックファイルとマルチパックインデックスへのすべての読み取りハンドルを閉じるために使用されます。
これは、読み取りハンドルがそれらのファイルへの書き込みをブロックするWindowsプラットフォームでは特に重要です。
これらのファイルの1つをrename()
で置き換えると、この状況で失敗します。Commit-graphは名前変更も実行するため、この問題の影響を受けやすくなっています。
コミットする前にコミットグラフを閉じるように注意していますが、 '_git fetch
_'(または同様の)プロセスがコミットを書き込む可能性のある '_git gc --auto
_'を実行する場合は機能しません-グラフ。ここで、
close_all_packs()
の一部としてcommit-graphを閉じます。