git gc错误:无法运行重新包装

时间:2013-09-01 21:42:10

标签: git garbage-collection

我只是在我的本地存储库上运行git gc来进行定期清理。今天是第一次,它失败了。这就是我所做的:(Windows 7)

C:\Source\TxTranslation>git gc
Counting objects: 880, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (540/540), done.
Writing objects: 100% (880/880), done.
Total 880 (delta 504), reused 589 (delta 333)
rm: cannot unlink `pack-18179305b5b5dbdaf059e4ded50b736ab93e220c.pack': Permission denied

C:\Source\TxTranslation>git gc
Counting objects: 880, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (369/369), done.
Writing objects: 100% (880/880), done.
Total 880 (delta 504), reused 880 (delta 504)
mv: cannot move `/c/Source/TxTranslation/.git/objects/pack/pack-3002d22690e007a4205f6ecfa19d6e93296fdd78.pack' to `/c/Source/TxTranslation/.git/objects/pack/old-pack-3002d22690e007a4205f6ecfa19d6e93296fdd78.pack'
error: failed to run repack

我可以随心所欲地重试它,我总是再次得到第二个输出。上面的“预先拒绝”错误是无稽之谈。我相信这是我在许多Windows系统上看到的常见虚假错误。它可能来自病毒扫描程序,使文件保持打开状态,以便不能立即删除它们。这导致了各种各样的问题,但显然无法避免。

这是一个问题吗?有什么东西坏了?我完全不明白这些信息对我意味着什么。使用差异浏览日志仍然有效。我该怎么做才能解决这个问题? (幸运的是我之前把所有东西都推到了Github,所以我可以简单地重新克隆它,但是我想先尝试修复它,以防它再次发生。)

7 个答案:

答案 0 :(得分:28)

事实证明,Visual Studio锁定了一些Git的文件。关闭Visual Studio解决了这个问题。

FTR,我在VS2010中使用Git源代码控制提供程序(在最后一个可用的版本0.6.4中)。也许这是事业的一部分。

答案 1 :(得分:16)

在我的情况下,git gc在枚举后将无法运行重新打包,但是在使用某些附加选项git gc --aggressive --prune=now时可以成功运行。

答案 2 :(得分:9)

我使用eclipse遇到了同样的问题。正在通过Eclipse以及git bash访问git存储库。

关闭eclipse后运行gc解决了

环境

Windows 7

Git 1.8.4.mysysgit.0

Eclipse Kepler SR2

答案 3 :(得分:4)

希望这有助于其他人。

在我的案例中,我发现Tortoise Git进程是锁定文件的罪魁祸首。 终止流程允许我git gc

答案 4 :(得分:4)

如果您正在使用git进行其他操作,或者在GUI中进行一些与git相关的操作,请取消操作或关闭错误,然后手动运行git gc,然后再次尝试操作。基本上,在Windows上,此消息表示git命令行客户端与某些其他程序之间存在争用。

在我的情况下,重新包装已作为git pull的一部分自动触发。当我得到错误时,在排除权限问题并快速进行健全性检查后,没有任何启动git进程的事情(IDE,git bash,git GUI)将会升级,我转到了Process Explorer找出文件打开的进程(查找 - >文件句柄或DLL),并找到git.exe作为另一个git.exe进程的父进程。我猜测自动重新打包代码中有一些锁定假设在Windows上是不合适的,默认情况下,打开文件会在操作系统级别对文件进行独占读/写锁定。

那是

$ git --version
git version 1.9.2.msysgit.0

答案 5 :(得分:3)

在我的情况下,一个正在运行的IISExpress实例应该受到责备。

答案 6 :(得分:1)

即使我在Visual Studio中关闭了我的解决方案,但在我最终关闭VS时解决了这个问题。我没有使用git源代码控制扩展。