解除文件链接失败

我尝试做一个 git pull,得到如下错误:

解除文件“ lib/xxx.jar”的链接失败。是否重试? (y/n)

无论我选择 y 还是 n 都不可能达到一个我可以拉或者推的状态。

112460 次浏览

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

尝试关闭您的其他程序,并再次尝试您的 git pull

请注意,使用 GIT_ASK_YESNO变量可以有另一种选择。


2019年1月更新:

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

5年12月0日(2018年12月15日) by 约翰内斯 · 辛德林(dscho)
(由 朱尼奥 · C · 哈马诺 gitster于2019年1月18日在 提交5104f8f合并)

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年第三季度)

提交 d562102提交 dcacb1b提交 df617b5提交0898c96(2016年1月13日) by 约翰内斯 · 辛德林(dscho)
(由 朱尼奥 · C · 哈马诺 gitster于2016年1月26日在 提交3c80940合并)

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

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

许多在退出之前运行“ 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期,它也应该缓解这个问题(提交2db0641) :

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


实际上,上面提到的 git-for-windows第500期在 Git 2.19,Q32018中已经修复了。
请参阅「 Git-取消文件 ABC0和 ABC1的链接失败(该文件的惟一进程所有句柄是 git.exe)

我也有这个问题,但我发现它是 UltraEdit 的方式,因为我使用 UE 来组织和编辑我的 Eclipse 工作区 ~ ~

也许是因为 UE 对特定文件的旧版本有一个句柄,Git 无法解除它的链接。

在我关闭 UltraEdit 之后,这个问题再也没有发生过。

在我的例子中,这是由 SimpLESS 引起的,它是 LESS 编译器。

这是一个 Windows 特有的答案,所以我知道它与你无关... 我只是为了以后的搜索者的利益包括它。

在我的例子中,这是因为我在一个非升级的命令行中运行 Git。“以管理员身份运行”帮我修好了。

问题是因为您有一些处理这些文件的程序。 我有一个建议,你应该使用解锁程序,找到处理它的程序:

开锁

我曾经在 WindowsXP 上遇到过这种情况,消息被卡在一个循环中,并且可以通过回复来清除。

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

其他情况的发生可能是由于我的存储库中有大量的文件。主要发生在。Cd 文件,稍后将其从版本控制中排除。(我确实有理由最初跟踪它们。)我认为原因可能与 Git 使用文件句柄的速度有关。

我想知道这个可以通过回复清除的问题是否与 Windows 有关,因为之前的两个帖子提到了 Windows,而且没有人说他们在其他操作系统上有问题。

尝试重新启动您的 Apache 或其他 Web 服务器,因为它可能已经锁定了您的一些文件。

对我来说,这是因为 VisualStudio 试图从提取中重新加载所有更改过的文件。有视觉工作室刷新,然后运行 git gc

在使用 GitHub for Windows 的 Windows 上,我在运行 git gc时在 shell 中得到了类似的错误:

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

我通过关闭 GitHub GUI 解决了这个问题。

关闭了 Visual Studio 和 Rubymine,没有再次出现错误,其中一个就是罪魁祸首。

我把 PHPStorm 打开,关上,一切都很好。

关闭您的 IDE,然后执行 git pull。它将工作。

我有同样的问题,我关闭了所有相关的程序从窗口任务管理器。然而,它仍然没有工作。 有趣的是,我运行了“ Git rebase”而不是“ Git pull”,而且它工作了!

以上的答案都不适合我,但是我运行带有强制选项的 git gc 命令,它解决了我的问题。

Git gc-force

[ Windows7,作为管理员运行 = > 命令提示符]

尝试在管理模式下运行命令行编辑器并运行命令

在我的例子中,我使用了一种旧的方法来修剪引起问题的标记。我把原件拆开就解决了:

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

然后添加这个来删除服务器上已删除的分支:

git config --global fetch.pruneTags true

我遇到了同样的错误,在使用该文件时关闭 eclipse 并再次拉取,从而解决了这个问题。

窗户上也有同样的问题。当文件在我的 Ubuntu VM 上被访问时,我试图在 windows 上运行 gc。Ubuntu 上关闭的终结者和文件浏览器为我工作。