git gc / git gui:取消链接文件<内部包文件名称>失败

运行git版本1.9.4.msysgit.0 ,我几乎每次在命令行上运行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. 

唯一的解决scheme似乎是每个locking的文件打n – 正如此线程所build议的:

简短的回答:点击'n'来打通所有这些,然后手动运行“git gc”。

线程还build议…

问题是这些文件被一个正在尝试执行gc的父git.exe保持打开。

……当看着过程树时,这是完全合理的:

混帐进程树

我的问题是,有什么我可以做,以防止这一点? 这真的很烦人不得不每天多次这样做…为什么会发生? 这是一个只有git / w32的bug吗?


更新1:澄清 – 按照描述的几次敲击后, git gc完成,本地存储库是“干净的”,即重新运行git gc不会导致所述的文件locking问题了 – 但这只是一段时间 。 在回购工作之后 – 有时在几分钟之后,有时在几个小时之后 – 存储库又是“脏的”,所描述的问题占上风。 从git-bash运行git gc而不是像jsexpertbuild议的那样使用 cmd是无济于事的。 他进一步build议其他非git软件可能会持有有问题的锁。 我对此持怀疑态度,不仅仅是因为上面链接的线程中的注释 – 我认为一个父git进程持有锁 – 但我仍然必须validation这一说法。

更新2:原来, jsexpert是正确的 – 至less在我的情况下,这确实是在这些文件的IDElocking…所以这是一个Eclipse的EGit Team Provider的问题,而不是git本身。

在这里输入图像说明

更新3:要findlocking的文件,您可以使用以下免费工具之一:

  • Process Explorer (现在,微软提供)
  • 进程黑客 (到现在为止,我的工具集中replace了进程pipe理器)

在这两个中,使用CTRL F调出“Find Handle”对话框。

我建议你做的是从git-bash (即%GIT_HOME%\bin\bash.exe )使用git ,而不是从cmd 。 一旦切换到git-bash你不应该期望得到这个问题,因为cmd是一个Windows命令,可能会锁定你的文件,而git-bash就像一个UNIX模拟器,它不会锁定你的文件(即使它实际上在Windows文件夹)。