GIT拉取失败:'无法取消链接文件:无效参数'

95

作为一个新的GIT用户,我正在管理一个运行在Windows服务器上的Moodle课程网站系统。我正在尝试使用TortoiseGit进行第一次Pull更新核心代码,但这似乎并不起作用。由于存在“无效参数”,Git无法取消链接任何需要更新的200多个文件的旧版本。我不知道这是什么意思。

在关闭了210个错误对话框后,情况如下图所示: tortoisegit

我已经重新启动了服务器并在网络上搜索了很多想法,但我还不知道该尝试什么。

非常感谢任何想法!


3
你有没有查看这个链接 https://dev59.com/aW855IYBdhLWcg3wPB36 ? 它讲解了 Git 报错 "unable to unlink old 'some-file-name' (bad file descriptor)" 的解决方法。 - mayo
26
在Windows上,当git抱怨无法“unlink”文件时,通常是因为另一个程序持有文件锁,防止任何其他写访问。尝试停止Web服务器服务,并关闭您认为可能与这些文件相关的任何其他应用程序。 - jingx
我停止了服务器,但是得到了相同的结果:无法取消链接。如果Web服务器没有使用文件,我无法想象还有哪个程序在使用它们... - pillsbur
2
我在Windows系统上也遇到过这个问题。重新启动系统解决了这个问题。我认为有一些孤立的进程保持着文件锁定状态,但是没有足够的权限以管理员模式运行Process Explorer来查找它。 - Jeroen Wiert Pluimers
由于某种原因,explorer.exe 喜欢在 NuGet 操作(例如更新现有包)完成后锁定 .csproj 文件。至少在我的机器上是这样的。特别是当我从具有较新版本的分支切换到具有(然后)不同版本的分支时。 - Steffen Winkler
16个回答

220

我也遇到了这个错误,浪费了好几个小时。

在我的情况下,这个错误是因为一些文件被另一个程序锁定。我不得不关闭所有的东西,然后才能再次进行拉取操作。

希望这能帮助到别人 :)


4
谢谢!那是我的原因 - 一些文件被多个“JDK平台二进制”实例使用,无法更新。对我来说解决方案是在分支检出之前手动关闭所有实例。 - ildar ishalin
1
在我的情况下,是 Eclipse 锁定了该文件。这个答案通常是正确的解决方案。 - lynxSven
1
我正在打开一个CSV文件并尝试更新它,结果发现Excel已经打开了...这是一个教训! - Neil C. Obremski
2
此外,如果您的文件存储在网络驱动器上,则锁定程序可能位于另一台计算机上。 - thelr
(Windows)如果关闭某个程序(例如从其关闭按钮)无法正常工作,请检查任务管理器以确保它的线程是否仍然存在。 - Jiang
显示剩余3条评论

50
错误信息显示了Git无法解除链接的文件名。在Windows中,您可以进入“开始菜单>资源监视器>CPU选项卡>关联句柄”,然后搜索文件名(而非完整路径),就能得到该文件被锁定的进程结果。在我的情况下,是"explorer.exe"。因此,我终止了该进程,Git表现如预期一样正常工作。
我猜您可以通过找到锁定文件的进程来执行其他操作系统的相同操作。

1
这个方法对我起到了作用。如果不是它,我自己可能想不出来。 - Tanzeel
1
这是非常宝贵的。 - CokoBWare
这是一个非常有效的解决方案,非常感谢。我的情况是devenv.exe在内存中卡住了很多文件,通过关联句柄可以看到它,杀死进程释放了文件,让bash能够执行我想要做的硬重置。 - Fernando Jaconete
那个方法可行,但我必须得快速! - Jens Mander

11

在使用Tortoisegit时,请尝试关闭其他工具。


10

当我尝试从gitlab拉取代码时,我也遇到了unlink问题。

根据ivan866和Nicolas Leucci的回答,为了解决这个问题,我只需在管理员模式下打开我的SourceTree即可。我想SourceTree没有足够的权限来正确处理文件权限。无论如何,这是值得一试的!


7
问题与文件权限有关。在Windows 7上使用外部驱动器后,再次在Windows 10上使用时可能会出现此问题。特别是在让第一台计算机(即首先使用的计算机)处于休眠状态且应用程序打开的情况下离开 - 当您重新连接驱动器并在另一台计算机上使用相同的应用程序打开这些文件后,许多已打开的文件可能会损坏。
可以使用CHKDSK /f来修复,但很可能会删除混乱的文件。

2

我重新启动了正在将“有问题”的文件拖入的电脑,并同时关闭了另一台电脑上正在使用该文件并从中推送的IDE。这样就解决了问题。


2
我在InteliJ上运行了一个程序,停止它后释放了文件。之后它就可以正常工作了。

这对我在Android Studio中也起作用了。这意味着如果其他应用程序正在文件上保持锁定,则可能会发生错误。因此,尝试关闭这些应用程序是一个好主意。 - Deshan

1

如果你的IDE中打开了该解决方案,就会出现这个问题,因为文件被锁定了。尝试关闭解决方案,然后重新尝试操作。


1

对我来说,我得到了以下内容:

"错误:无法取消链接旧的'Library/ArtifactDB':无效的参数 错误:无法取消链接旧的'Library/SourceAssetDB':无效的参数 致命错误:无法将索引文件重置为修订版本“HEAD”。

当我关闭Unity后,Git就能正常工作了。我认为Unity权限可能会导致它出现问题。


0

我在合并分支时遇到了这个问题。使用管理员权限打开 Powershell 并在其中执行合并操作有所帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接