运行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。
我应该安排磁盘扫描吗?坏道会造成这种情况吗?我希望这是一个快速的答案:(
答案 0 :(得分:30)
尝试在安全模式下执行git gc
。
另一个选择是在新位置克隆存储库并删除旧存储库。
答案 1 :(得分:18)
在我的情况下,它是TortoiseGit。为了解决这个问题,我打开了TortoiseGit Settings-> Icon Overlays并将状态缓存设置为“None”。 现在进程TGitCache结束了,所以所有对象都“免费”由git gc处理。
答案 2 :(得分:1)
您需要关闭锁定命令的命令所在的控制台。这可能是锁定文件或任何被杀死的命令的VI。最简单的解决方案是关闭所有内容并重新打开。您应该能够毫无问题地执行命令。
答案 3 :(得分:0)
Git 2.23(2019年第三季度)应避免在gc
期间出现权限被拒绝的问题,因为提交图(introduced in Git 2.18)会预先计算并在单独的文件中存储血统遍历所需的信息以进行优化图行走。
在Git 2.23中,提交图文件是“运行时文件”的一部分 可能会保留打开的文件描述符,所有这些都需要 对象存储完成后关闭”,并将文件描述符 现在,在 前关闭现有的提交图文件“ gc”完成 新实例替换它。
请参见commit 2d511cf的commit 5472c32,commit c3a3a96,Derrick 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()
的一部分。