取消链接文件失败


169

我正在尝试进行git pull并收到以下错误:

文件'lib / xxx.jar'的取消链接失败。我应该再试一次吗?(是/否)

无论我选择y还是n,都无法进入可以拉动或推动的状态。


您是否检查了是否有权写入该文件?
拉斐尔·米歇尔

1
运行正确chmod和/或chown在所述文件上运行。
Not_a_Golfer

我应该有权利,否则我将对它进行chown / chmod!
marko 2012年


Answers:


204

这通常意味着某个进程仍在使用该特定文件(仍然具有该文件的句柄)
(在Windows上,ProcessExplorer擅长跟踪此类进程)

尝试关闭其他程序,然后重试git pull

请注意,您可以使用GIT_ASK_YESNO变量作为替代。


2019年1月更新:

在Git 2.21(2019年第一季度)中,这应该更加固定,因为“ git gc”和“ git repack”在删除它们之前并没有关闭它们不需要的打开包文件,而这些文件在无法删除打开文件的平台上不起作用。
这已得到纠正。

参见Johannes Schindelin()的commit 5bdece0(2018年12月15日(通过合并JUNIOÇ滨野- -提交5104f8f,2019年1月18日)dscho
gitster

gc/ repack:在需要时发布包

在Windows上,如果某个进程仍保留着句柄,则无法删除或重命名文件。
为了解决这个问题,我们引入了该close_all_packs()功能。

早些时候,我们确保在生成包之前git gc就释放它们,以防万一gc想要删除不再需要的包。

但是该开发人员忘记了gc本身也需要放开包装,例如,通过--aggressive选件合并所有包装时。

同样,git repack -d要删除过时的包,因此也需要关闭所有包句柄。


2016年1月更新

这应该在Git 2.8(2016年3月)中修复(请参见下面的Git 2.19,2018年第三季度)

请参阅Johannes Schindelin()的提交d562102提交dcacb1b提交df617b5提交0898c96(2016年1月13日(由Junio C Hamano合并--3c80940号提交中,2016年1月26日)dscho
gitster

fetch:在垃圾回收之前释放包文件

在自动gc'ing之前,我们需要确保已释放打包文件,以防它们需要重新打包和垃圾回收。

许多gc --auto在退出之前运行“ ”的代码路径保持映射的包文件并使文件描述符保持打开状态,这对于无法删除已打开文件的系统而言并不友好。
现在,他们在这样做之前关闭了包装。

可以解决git-for-widows问题500

查看用于验证该新方法测试,可能的解决方法(因为Git 2.8尚未发布)将是人为提出的gc.autoPackLimit

git config gc.autoPackLimit 10000
git fetch
git config gc.autoPackLimit 50 # default value

git 2.8.4(2016年6月)确实提到了第755期,这也应该缓解该问题(commit 2db0641):

确保临时文件句柄不被子进程继承


其实,git-for-windows问题500上述真是固定使用Git 2.19,2018年第三季度
请参阅“ 混帐-文件取消链接.idx.pack失败的(唯一的进程所拥有的句柄此文件git.exe


5
最有可能是使用该jar文件运行的JVM。
托尔比约恩Ravn的安徒生

2
以我为例,是Skype。我之前已将文件传输给其他人,有些还没有接受或取消。
Vivek Kodira

6
我发现Windows Explorer是元凶。这很可能是因为TortoiseGit的图标覆盖或TGitCache。关闭所有打开的文件夹就可以了,但是如果打开了,则可能只需要关闭项目文件夹。
艾伦·伯

4
就我而言,这是VS2013,因为它已绑定到开放解决方案。
BrotherOdin 2014年

2
Explorer.exe是我的问题-我没有TortoiseGit。我从任务管理器中杀死了explorer.exe,并使用CTRL-ALT-DELETE =>任务管理器=> File => Run New Task =>“ explorer.exe”(不带引号)生成了一个新文件
joehanna

57

这是Windows的特定答案,因此我知道它与您无关...我只是为了将来的搜索者而包括它。

就我而言,这是因为我是从非提升命令行运行Git的。“以管理员身份运行”为我修复了该问题。


4
我在Windows 7上执行pull和git进行自动打包时遇到了这个问题。它抱怨“ idx”文件。然后,我以管理员身份打开控制台窗口并运行git gc,没有问题。因此,这是一个很好的解决方案。
2014年

1
git gc在Windows 7上为我完成了它。发生在b / c上,我在推WebStorm时正在cmder上进行git pull
Alessandro

2
哇。谢谢NeilD。它也为我修复了它。最好再将GIT移植到Windows。
MartinDobšík16年

好吧...这是6年前需要的。现在?谁知道?¯_(ツ)_ //
NeilD

30

对我来说,这是因为Visual Studio试图从请求中重新加载所有更改的文件。刷新Visual Studio,然后运行git gc


3
对我来说也一样。在运行git gc之前需要关闭Eclipse。
2015年

5

在使用GitHub for Windows的Windows上,运行时在Shell中出现类似错误git gc

Unlink of file '.git/objects/pack/pack-0b40ae7eae9b83edac62e19c07ff7b4c175244f6.idx' failed. Should I try again? (y/n)

我通过关闭GitHub GUI解决了它。



2

关闭了Visual Studio和Rubymine,没有再次收到错误。其中一个是元凶。



1

我也遇到了这个问题,但是我发现这是UltraEdit,因为我使用UE来组织和编辑Eclipse工作区~~

可能是因为UE可以处理旧版本的特定文件,所以Git无法取消链接。

关闭UltraEdit之后,该问题不再发生。



0

问题是因为您有一些处理这些文件的程序。我建议您使用Unlocker查找正在处理它的程序:

解锁器


0

我曾经在Windows XP上发生过这种情况,既使消息陷入循环,又能够通过回复清除。

通过关闭Git-GUI清除了卡在循环中的情况。(我在bash shell中运行git merge -i。)

其他事件的发生可能是由于我的存储库中的文件过多。它主要发生在.cod文件中,后来我将其排除在版本控制之外。(我确实有对它们进行初始跟踪的原因。)我认为原因可能与Git使用文件句柄的速率有关。

我想知道,是否可以通过答复解决的问题是否与Windows有关,如前两个张贴者所提到的Windows,而没有人说他们与其他操作系统有关。


0

我打开了PHPStorm,将其关闭,一切都很好。


0

我遇到了同样的问题,并从Window Task Manager中关闭了所有相关程序。但是,它仍然无法正常工作。有趣的是,我运行了“ Git rebase”,而不是“ Git pull”,它起作用了!


0

上面的答案都不对我有用,但是我使用force选项运行git gc命令,它解决了我的情况。

'git gc --force'

[Windows 7,以管理员身份运行=>命令提示符]



0

就我而言,我有一种古老的修剪标签方法来导致问题。我通过取消原始设置解决了它:

git config --global --unset remote.origin.fetch '\+refs/tags/\*:refs/tags/\*'

然后将其添加到服务器上已删除的分支中:

git config --global fetch.pruneTags true

0

我遇到了同样的错误,并通过关闭Eclipse并在使用文件时再次拉动来解决了该错误。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.