47

我刚刚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,所以我可以简单地重新克隆它,但我想先尝试修复它,以防它再次发生。)

4

8 回答 8

39

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

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

于 2013-10-15T08:16:24.137 回答
36

在我的情况下git gc,枚举后无法运行 repack,但在使用一些附加选项运行时它是成功的,git gc --aggressive --prune=now.

于 2018-12-12T06:52:01.717 回答
9

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

关闭eclipse后运行gc解决

环境

Windows 7的

Git 1.8.4.mysysgit.0

日食开普勒 SR2

于 2014-04-28T08:31:16.880 回答
5

如果您正在使用 执行某些其他操作git,或者在 GUI 中执行某些与 git 相关的操作,请取消操作或关闭错误,然后手动运行 a 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
于 2015-09-09T20:07:23.260 回答
4

希望这对其他人有帮助。

就我而言,我发现 Tortoise Git 进程是锁定文件的罪魁祸首。终止该过程使我能够git gc

于 2014-10-07T14:21:13.697 回答
3

在我的情况下,一个正在运行的 IISExpress 实例是罪魁祸首。

于 2015-07-19T23:52:00.423 回答
2

即使在我在 Visual Studio 中关闭我的解决方案之后,这种情况也发生在我身上,但在我最终关闭 VS 时得到了解决。我没有使用 git 源代码控制扩展。

于 2015-05-29T18:55:21.890 回答
0

2022年这个问题依然存在,我今天搞定了。这里提出的解决方案都不适合我,所以我从头开始,找到了我的解决方案。

# Inside the git folder, try to get the repository URL
git remote -v

# Go to another folder and clone it
git clone <address_from_previous_step>

# Compare the two folders to not miss any data
diff <broke_git_folder> <new_git_folder>

# When you have everything on new folder, delete the older folder
rm -rf <broke_git_folder>

就是这样。

于 2022-02-08T13:26:11.353 回答