34

运行 git gc 时,我不断看到此错误:

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

我可以/应该如何处理这个错误?

更新

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

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

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

然而,我在上面发布的错误是直接从 git bash 运行 git gc 造成的。

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

4

4 回答 4

30

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

尝试git gc在安全模式下进行。

另一种选择是将存储库克隆到新位置并删除旧位置。

于 2012-05-05T18:06:40.730 回答
18

就我而言,它是 TortoiseGit。为了解决这个问题,我打开了 TortoiseGit Settings->Icon Overlays 并将状态缓存设置为“None”。现在进程 TGitCache 结束了,这样所有的对象都是“空闲”的,可以被 git gc 处理。

在此处输入图像描述

于 2013-03-19T07:15:51.197 回答
1

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

于 2015-06-04T16:04:00.167 回答
1

Git 2.23(2019 年第三季度)应该避免gc由于提交图(在 Git 2.18 中引入)而导致的权限被拒绝问题,该提交图会预先计算并将祖先遍历所需的信息存储在单独的文件中以优化图遍历。

在 Git 2.23 中,提交图文件是“运行时可能保持打开文件描述符打开的文件,所有这些文件在使用对象存储完成后都需要关闭”的一部分,并且文件描述符是现有提交的图形文件现在在“gc”最终确定一个新实例以替换它之前关闭。

参见Derrick Stolee ( ) 的commit 2d511cfcommit 5472c32commit c3a3a96(2019 年 5 月 17 日(由Junio C Hamano 合并——提交 5cb7c73中,2019 年 7 月 9 日)derrickstolee
gitster

packfile: 关闭提交图close_all_packs

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

提交图还执行重命名,因此很容易出现这个问题。在写入之前,我们会小心关闭提交图,但是当“ ”(或类似的)进程运行“ ”
时,这将不起作用,这可能会写入提交图。git fetchgit gc --auto

在这里,关闭提交图作为close_all_packs().

于 2019-07-14T16:52:06.897 回答