我可以/应该怎么做这个git gc错误? (rm:无法取消链接包权限被拒绝)

时间:2012-05-05 12:32:34

标签: git garbage-collection permission-denied

运行git gc时,我一直看到这个错误:

rm: cannot unlink 'pack-30b1ff2[reset of hash].pack': Permission denied

我可以/应该对此错误做些什么?

更新

抱歉,我应该提供更多信息。是的,我尝试过重启。事实上,重新启动之前已经为我修复了gc问题。

我只注意到这个问题,因为当我打开Git Gui时,它会立即提示我压缩数据库。我最终注意到,经过几次打开Git Gui,它一直在提示我,即使我点击了Yes,它又回来了“成功”。

然后我尝试用Git EXT的设置运行它 - Git维护 - 压缩git数据库命令。这个命令告诉我有一个错误(Git EXT中的红灯,而Git Gui中有绿灯)。

我上面发布的错误是直接从git bash运行git gc。

我应该安排磁盘扫描吗?坏道会造成这种情况吗?我希望这是一个快速的答案:(

4 个答案:

答案 0 :(得分:30)

Windows上的“权限被拒绝”通常是由正在运行的进程锁定引起的。很可能是一个停顿的Git EXT线程打开了包文件。

尝试在安全模式下执行git gc

另一个选择是在新位置克隆存储库并删除旧存储库。

答案 1 :(得分:18)

在我的情况下,它是TortoiseGit。为了解决这个问题,我打开了TortoiseGit Settings-> Icon Overlays并将状态缓存设置为“None”。 现在进程TGitCache结束了,所以所有对象都“免费”由git gc处理。

enter image description here

答案 2 :(得分:1)

您需要关闭锁定命令的命令所在的控制台。这可能是锁定文件或任何被杀死的命令的VI。最简单的解决方案是关闭所有内容并重新打开。您应该能够毫无问题地执行命令。

答案 3 :(得分:0)

Git 2.23(2019年第三季度)应避免在gc期间出现权限被拒绝的问题,因为提交图(introduced in Git 2.18)会预先计算并在单独的文件中存储血统遍历所需的信息以进行优化图行走。

在Git 2.23中,提交图文件是“运行时文件”的一部分 可能会保留打开的文件描述符,所有这些都需要 对象存储完成后关闭”,并将文件描述符 现在,在 前关闭现有的提交图文件“ gc”完成 新实例替换它。

请参见commit 2d511cfcommit 5472c32commit c3a3a96Derrick Stolee (derrickstolee)(2019年5月17日)。
(由Junio C Hamano -- gitster --commit 5cb7c73中合并,2019年7月9日)

  

packfile:关闭close_all_packs中的提交图

     

close_all_packs()方法用于在运行'git gc --auto'之前关闭所有对打包文件和multi-pack-index的读取句柄。
  这在Windows平台上尤其重要,在Windows平台上,读取句柄会阻止对这些文件的任何写入。
  在这种情况下,用rename()替换其中一个文件将失败。

     

提交图还执行重命名,因此很容易出现此问题。
  我们非常小心,在写入之前关闭提交图,但是当'git fetch'(或类似的)进程运行可能会写入提交图的'git gc --auto'时,该操作将无效。      

在这里,关闭提交图作为close_all_packs()的一部分。