取消链接文件失败

时间:2012-04-16 20:16:29

标签: windows git

我正在尝试做一个git pull,我收到以下错误:

  

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

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

17 个答案:

答案 0 :(得分:199)

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

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

请注意,您可以选择GIT_ASK_YESNO variable


2019年1月更新:

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

commit 5bdece0Johannes Schindelin (dscho)(2018年12月15日) (由Junio C Hamano -- gitster --合并于commit 5104f8f,2019年1月18日)

  

gc / repack:在需要时发布包

     

在Windows上,如果进程仍有句柄,则无法删除文件或重命名文件   为了解决这个问题,我们引入了close_all_packs()函数。

     

之前,我们确保在git gc生成gc之前发布包,以防gc想要删除不再需要的包。

     

但是这位开发人员忘记了--aggressive本身也需要放弃包装,例如通过git repack -d选项整合所有包时。

     

同样,fetch想要删除过时的包,因此也需要关闭所有的包句柄。


2016年1月更新

这应该在Git 2。8(2016年3月)中修复(见下面的Git 2.19,Q3 2018)

commit d562102commit dcacb1bcommit df617b5commit 0898c96Johannes Schindelin (dscho)(2016年1月13日)。{
Junio C Hamano -- gitster --于2016年1月26日commit 3c80940合并)

  

gc --auto:在垃圾收集之前发布包文件

     

在auto-gc'ing之前,我们需要确保在需要重新打包和垃圾收集的情况下发布包文件。

     

许多在退出之前运行“gc.autoPackLimit”的代码路径会保留打包的文件并将文件描述符保留为打开状态,这对于无法删除打开的文件的系统不友好。
  他们现在关闭包装。

修正了git-for-widows issue 500

查看test used to validate that new approach,可能的解决方法(因为Git 2.8还没有出来)将是人为提升git config gc.autoPackLimit 10000 git fetch git config gc.autoPackLimit 50 # default value

{{1}}

git 2.8.4 (June 2016)确实提到issue 755,这也应该缓解这个问题(commit 2db0641):

  

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


实际上,上面提到的git-for-windows issue 500确实是用Git 2.19,Q3 2018修复的 请参阅“Git - Unlink of file .idx and .pack failed (The only process owned handle to this file is git.exe)

答案 1 :(得分:54)

这是一个Windows特定的答案,所以我知道它与你无关......我只是为了未来的搜索者的利益而包含它。

在我的情况下,这是因为我从一个非提升的命令行运行Git。 “以管理员身份运行”为我修好了。

答案 2 :(得分:26)

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

答案 3 :(得分:5)

在使用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解决了这个问题。

答案 4 :(得分:2)

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

答案 5 :(得分:2)

关闭Visual Studio和Rubymine并且没有再次收到错误。其中一个是罪魁祸首。

答案 6 :(得分:2)

关闭IDE然后执行git pull。它会工作。

答案 7 :(得分:1)

这是我的案例中由LESS编译器SimpLESS引起的。你必须在系统托盘中关闭它。

答案 8 :(得分:0)

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

答案 9 :(得分:0)

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

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

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

git config --global fetch.pruneTags true

答案 10 :(得分:0)

尝试在管理模式下运行命令行编辑器并运行命令。它可以帮助解决问题。 :)

答案 11 :(得分:0)

以上所有答案均不适合我,但我使用force选项运行git gc命令,就解决了我的情况。

'git gc --force'

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

答案 12 :(得分:0)

我遇到了同样的问题,我从Window Task Manager关闭了所有相关程序。但是,它仍然无法正常工作。 有趣的是我跑了" Git rebase"而不是" Git pull"它有效!

答案 13 :(得分:0)

我打开了PHPStorm,关闭了,一切都很顺利。

答案 14 :(得分:0)

我在Windows XP上发生过这种情况,这些消息都被卡在循环中,并且可以通过回复来清除。

关闭Git-GUI可以清除卡住的循环事件。 (我在bash shell中运行git merge -i。)

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

我想知道能够被回复的问题是否与Windows相关,因为之前的两个海报都提到过Windows,没有人说过他们遇到过其他操作系统的问题。

答案 15 :(得分:0)

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

Unlocker

答案 16 :(得分:0)

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

也许是因为UE有特定文件旧版本的句柄,Git无法取消链接。

关闭UltraEdit后,问题再也没有发生过。