文件取消链接失败。我应该再试一次吗?

838

我的本地Git仓库中有一个文件出现了问题。当我试图切换分支时,会显示以下提示:

Unlink of file 'templates/media/container.html' failed. Should I try again? (y/n)

那可能意味着什么?


1
请查看这个问题 - RDL
可能是 Git rebase got 'unlink of file failed' error 的重复问题。 - Josh Lee
1
还要检查git进程对该文件是否具有写权限。 - boileau
5
可能是文件解除链接失败的重复问题。 - BartoszKP
考虑到现在这是谷歌搜索中的第一个结果,而且这里的问题和答案已经获得了比其他链接问题高出10倍以上的浏览量和赞数,我敢说这现在已经成为“解除文件链接失败”问题的事实参考问答。 - Suman
显示剩余3条评论
39个回答

1129

这可能意味着另一个程序正在使用文件,这会阻止 git 在您尝试更改分支时将文件“移动”到或从工作目录中。

我曾经在 Windows Vista 上遇到过这种情况,其中 Eclipse 是“使用”该文件的程序。该文件可能并未在 Eclipse 中打开,但可能已被由 Eclipse 运行的进程打开。

在这种情况下,请尝试关闭任何可能使用该文件的应用程序。如果这不起作用,请完全退出可能已打开该文件的所有应用程序。


73
在Windows系统上,使用ProcessExplorer来查找哪个进程打开了该文件。 - Dave C
31
我使用的是Visual Studio和它的Git插件。 - Michał Powaga
34
在Windows系统中,如果您没有ProcessExplorer或者不想下载它,您可以运行(Windows+R)“resmon”,进入CPU选项卡并在“相关标识符”文本框中搜索文件名。 - Raphael
16
如果你使用GitKraken进行一些操作,比如变基(rebase),可能会遇到这种情况。 - mtpultz
14
当我打开GitKraken时,出现了问题。 - Marcin Kulik
显示剩余21条评论

363

我之前遇到了这个问题,通过执行指令:git gc来解决。 上述指令可以移除临时和无用的文件。(垃圾回收器)


60
git pull 命令会自动触发 git gc,而 gc 会尝试访问一些 .pack.inx 文件。这些文件被拥有 git pull 命令的“Windows git”进程所占用。手动运行 git gc,然后再运行 git pull 真正解决了这个问题。 - Nikita
8
运行 git gc 时,在 gc 进行中又遇到了同样的错误。 - Prakash K
6
手动运行git gc,然后使用git pull确实解决了这个问题。这很有帮助。谢谢Nikita。 - sangam
2
这也帮助了我。在Windows上使用Git Bash运行了这个。 - Ascalonian
太棒了!谢谢。 - Vnuuk
显示剩余3条评论

113

我从这里得到的解决方案对我有用:

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

在我的情况下,是因为我从非提升的命令行中运行Git。 "以管理员身份运行"对我有帮助。


3
对我有用。以管理员身份运行VS,然后从VS启动命令提示符。 - Sentinel
5
我:输入Ctrl+C 终止无法链接的很长的文件列表;退出了GitBash、我的IDE和GitHub Windows应用程序;以管理员权限重新启动GitBash;并运行 git gc --aggressive。虽然花费了一些时间才完成,但是没有出现任何错误。 - Mark McClelland
如果您认为这是重复的内容,您应该标记它,而不是添加一个指向另一个答案的回答。 - Liam
3
@Liam 这个问题比较旧,但这个答案只在另一个问题上,而且对于这个问题并不仅仅有一个答案,这使得将其设置为重复问题更加困难。 - sepehr
这对我来说非常有效。之前的回答都没有用。非常感谢。 - Roberto Rodriguez
对我来说起作用!我只需要用管理员身份打开终端,然后取消链接文件的问题就停止了。 - undefined

47

在执行 git pull 时,我遇到了这个问题。

我尝试过执行 git gc,并解决了我的问题。


我在Windows机器上遇到了这个问题,这个解决方案最初并没有起作用。然而,一旦我从管理员命令提示符中运行了这个命令,它就解决了我的问题。 - William W

27

在我的情况下,没有任何进程接触到该文件或目录。也许是因为路径太长而导致的,这是操作系统的限制(Windows)。请尝试按照以下指示在全局 Git 配置中启用 longpath 支持标志:

git config --global core.longpaths true

或者尝试设置是否答案为是/否的标志,如果对您没有冲突的话。

set GIT_ASK_YESNO=false

如果路径太长,我还没有找到成功的解决方案。


7
我不知道为什么,但设置 "git config --global core.longpaths true" 对我有帮助。 - Maxim
GIT_ASK_YESNO,找不到关于它的信息。它来自哪里? - majkinetor
请参考以下链接:https://dev59.com/rHA65IYBdhLWcg3wqQc8。例如,我不知道它是否适用于最新版本的Git(2.9)。 - andhdo
core.longpaths 加上以下内容:reset --hard prune gc对我有用 - 但必须关闭 AndroidStudio,以免与其内置工具冲突。 - bovquier

19

如果你尝试了上述方法却无效,可以尝试以下步骤:

  1. 关闭你的IDE(我的是Eclipse,不确定Intellij和其他IDE是否适用)或其他可能正在使用Git的应用程序。

  2. 在命令行中打开 Git(我使用的是 Git Bash),并执行其他人提到的 git gc 命令。

对我来说这个方法很有效。


1
这是唯一一个对我的情况有用的答案,使用Android Studio。 - 0101100101

16

由于我使用了GitKraken和命令提示符,我遇到了同样的问题。然后我运行了git gc命令解决了我的问题。所以我很高兴并想分享一些有用的信息。

git gc会做什么?

git gc将删除可能是从之前的git add调用中创建的无法访问的对象。

何时运行git gc

根据文档,建议用户在每个仓库内定期运行此任务,以维护良好的磁盘空间利用率和良好的操作性能。

如何使其自动配置?

一些git命令可以自动运行git gc; 有关详细信息,请参见下面的--auto标志。如果您知道自己在做什么,只想永久禁用此行为而不需要进一步考虑,请执行以下操作:

git config --global gc.auto 0

我关闭了GitKraken和我的外部Git命令行窗口,然后执行了git gc,现在一切似乎恢复正常了。 - JWess

12

我在Windows 7上遇到过这种问题,后来发现是因为一些孤立的git.exe进程导致的。

要解决这个问题,请打开任务管理器并终止所有git.exe进程。

由于git命令的生命周期很短,通常情况下不会在任务管理器中看到任何git.exe。当它们出现时,通常意味着出了点问题,你应该终止这些进程。


11

我尝试了git gc,并解决了我的问题。


10
在 Windows 8 上: 我运行了 git gc 命令,但它显示 git gc 已在运行。然后我运行了 git gc --force 命令,垃圾回收器就可以正常运行了。 接着,我可以切换分支并进行合并,而不会出现任何问题,请尝试使用 git gc --force 命令。 也许由于某种原因,gc 进程没有正常停止。

这也适用于Windows 10。 - oguzhan
即使强制执行,问题仍然存在。 - Marian Klühspies

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