运行1.9.4.msysgit.0
的版本git
,我几乎每次在命令行上运行git gc
或通过git gui
时都会收到上述错误它促使我“压缩松散的物体”:
Counting objects: 1110956, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (269562/269562), done.
Writing objects: 100% (1110956/1110956), done.
Total 1110956 (delta 636114), reused 1110956 (delta 636114)
Unlink of file '.git/objects/pack/pack-207f1feb5376880778637c ... 8371cea62.pack'
failed. Should I try again? (y/n) n
Checking connectivity: 1110956, done.
唯一的解决方案似乎是针对每个锁定文件点击 n - 正如this thread所建议的那样:
简短回答:点击'n'以完成所有这些操作,然后手动完成 运行“git gc”。
线程还暗示......
问题是文件由正在尝试执行gc的父git.exe保持打开。
......在查看流程树时,这完全合情合理:
我的问题是,我能做些什么来防止这种情况发生?每天多次这样做真的很烦人......为什么会这样?它只是一个git / w32错误吗?
更新1:澄清一下 - 按照描述的几次点击 n 后,git gc
完成,本地存储库“干净”,即重新运行git gc
不会再导致文件锁定问题 - 但这只是一段时间。在repo上工作了一段时间 - 有时在几分钟之后,有时在几小时之后 - 存储库再次“脏”并且所描述的问题占上风。根据{{3}}的建议,在git gc
内而不是git-bash
内运行cmd
无效。他进一步建议其他非git
软件可能会持有相关锁。我对此持怀疑态度,尤其是由于上面链接的线程中的注释 - 我认为父git
进程正在持有锁 - 但我仍然必须验证该声明。
更新2:事实证明jsexpert一直都是正确的 - 至少在我的情况下确实是IDE锁定了这些文件......所以这是{的一个问题{3}}用于Eclipse,而不是git
本身。
更新3:要查找锁定的文件,您可以使用以下免费工具之一:
在这两个中,使用 CTRL F 打开“查找句柄”对话框。
答案 0 :(得分:0)
检查另一个进程是否没有锁定文件。就我而言,我只需要关闭一个 Eclipse 实例,该实例从运行“git gc”的 git 存储库中打开了一个项目。
答案 1 :(得分:-1)
我建议您使用git
中的git-bash
(即%GIT_HOME%\bin\bash.exe
),而不是cmd
。
切换到git-bash
后,您不应该期望遇到此问题,因为cmd
是一个可能会锁定文件的Windows命令,而git-bash
就像一个不会锁定文件的UNIX模拟器(即使它实际上在你的Windows文件夹上查找。)