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

我的本地git存储库中的一个文件出了问题。当我尝试更改分支时,它说:

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

这意味着什么呢?

466717 次浏览

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

我在Windows Vista上发生过这种情况,其中eclipse是“使用”文件的程序。该文件可能不是在eclipse中实际打开的,而是由eclipse运行的进程打开的。

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

在我的情况下,没有进程接触文件或目录。如果路径很长,可能会发生这种情况,因为操作系统限制(windows)。尝试在全局git配置中启用长路径支持标志,如下所示:

git config --global core.longpaths true

或者尝试设置是/否回答标志,如果它对您没有冲突

set GIT_ASK_YESNO=false

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

我在/.git/objects/pack文件夹中的.tmp文件遇到了这个问题。我想在推或拉过程中有些东西失败了,所以我删除了这些临时文件并将HEAD重置为我的最后一次提交。不确定是否建议这样做,但它对我有用。此外,git count-objects -v给了我一个不属于包文件夹的.tmp文件列表。

或者在Windowsgit open cmd.exe中取消y/n消息并运行:

SETX GIT_ASK_YESNO false

在这里看到:https://twitter.com/petercamfield/status/494805475733807104

我遇到了这个问题,并通过命令解决了它:git gc上面的命令删除临时文件和不必要的文件。(垃圾收集器。)

这可能是一个单独的gitk窗口,运行以查看一些git历史记录。

只需关闭此窗口即可解决此问题。

我在同时运行git Bash和Eclipse EGit时遇到了这个问题。解决方案:关闭Eclipse。运行git gc也没什么坏处,就像@khelo提到的那样。

这个来自这里的解决方案为我工作:

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

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

我在Windows 7上遇到过这种问题,结果是由于一些孤立的git.exe进程。

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

由于git命令是短暂的,因此您通常不应该在任务管理器中看到任何git.exe。当它们在那里时,通常意味着出了问题,您应该杀死这些进程。

在我的情况下(Win8.1,TortoiseGit运行),是名为“TortoiseSVN状态缓存”的进程锁定了文件。

杀死它允许我运行“git gc”而没有任何问题。上述进程由TortoiseGit启动,因此无需手动重新启动它。

我在做git pull时遇到了这个问题。

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

在Windows 8上:我运行git gc,它说git gc已经在运行,我运行git gc --force,垃圾收集器运行。

然后我可以切换分支并合并没有任何问题,尝试git gc --force

也许gc进程没有因为这样或那样的原因而优雅地停止。

在尝试了各种解决方案后,终于git clean -f帮助了我。

编辑:我又遇到了几次问题-关闭所有依赖于git的进程似乎有所帮助(如gitbash、Eclipse IDE等)

在上面的答案似乎都不起作用之后,运行git fetch -p为我做了这项工作。

我在Windows中遇到了这个问题,您可能希望以管理员身份运行git bash,然后执行所需命令,这为我解决了这个问题。

我在Windows中遇到了这个问题。我关闭了我的IDE(Android Studio)并在git shell中选择了YES。它起作用了。

我在做'git拉'时遇到了同样的问题。我尝试了手动管家git命令'git gc',它解决了我的问题。

如上所述,还有其他东西保存着文件。问题是程序对我们来说并不可疑。我试图从控制台执行git拉取,同时打开了GitKraken。关闭GitKraken解决了问题。

这可能对某人有用;如果上述所有方法都不适用于您,请按照以下步骤操作:

  1. 关闭您的IDE(我的是Eclipse,不确定它是否适用于Intellij和其他)或任何其他可能使用git的应用程序。

  2. 从命令行打开git(在我的情况下,我有git bash)并运行其他人提到的git gc

这对我来说是魔法。

在Windows上,在一个(相当大的)存储库的git clone上看到了这个错误。关闭SmartGit并暂停了我的备份软件(CrashPlan),之后它起作用了。不确定这两个中的哪一个起了作用,但如果运行,这可能也会对你起作用。

我在做git拉取时遇到了同样的问题,如上所述,这是因为一个保存这些文件的程序不允许git拉取。关闭程序有帮助。通常,文件签入的IDE(如Eclipse)将在后台保存它。关闭相同的并重新运行git拉取为我解决了问题。

运行后命令

git rm -rf foo.bar

我看到错误

Unlink of file 'foo.bar' failed. Should I try again? (y/n)

因为另一个程序正在使用此文件。例如,当我在调试模型中运行JavaWeb应用程序或在服务器上运行Web应用程序时,我无法删除日志文件。关闭应用服务器(或关闭调试进程),重试

git rm -rf foo.bar

我看到文件已被删除。

我遇到了同样的错误,关闭打开文件的应用程序解决了这个问题。我能够返回并按“Y”

如果您正在开发一个Web应用程序,一个常见的原因是忘记关闭服务器。例如,这可能是一个简单的Node.js进程,或者在Windows上,您的IIS进程作为后台进程运行得更不显眼。

当我使用垃圾邮件和命令提示符时,我遇到了同样的问题。然后我运行git gc命令它解决了我的问题。所以我很高兴,想分享一些可能有帮助的观点。

git gc会做什么?

git gc删除可能从先前调用git add创建的不可达对象。

什么时候运行git gc

doc开始,鼓励用户在每个存储库中定期运行此任务,以保持良好的磁盘空间利用率和良好的操作性能。

如何使其自动配置?

一些git命令可能会自动运行git gc;有关详细信息,请参阅下面的--auto标志。如果您知道自己在做什么并且只想永久禁用此行为而无需进一步考虑,只需这样做

git config --global gc.auto 0

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

我尝试了这个页面上的每一个提示,没有任何帮助。我正在做一个git fetch,一个git reset --hard origin/development给了我一个unkink错误。我无法重置到最新的提交。

有帮助的是检查另一个分支,然后检查前一个分支。非常奇怪,但它解决了问题。

在我的情况下有一个复制或替换窗口为该特定的文件打开因此解除关联错误.我关闭它并没有解除关联错误

我能够在打开PowerShell作为管理员之前解决这个问题,然后从那里开始git checkout <branch_name>

如果关闭IDE并运行此处列出的各种git命令没有帮助,请尝试手动杀死所有正在运行的Java进程。我有一个Java进程可能是eclipse遗留下来的,它以某种方式保持配置文件打开。

如果您正在使用Docker并运行Windows 10,您可能希望停止文件可能正在运行的容器。要显示容器的状态,请运行

docker ps -a

要阻止他们,只要逃跑

docker stop <container name or container id>

这对我有用,因为我正在使用. sh文件运行我的本地文件

工作对我来说,尝试在Windows上:

停止您的服务器从IDE运行或关闭您的IDE

Intellij/Ecllipse或任何,它将工作。

对于我的Spring Boot项目,我在尝试运行git stash时遇到了这个错误。

解决方案是杀死我的机器上运行的所有Java进程。

在我的情况下,原因是我在当天早些时候以管理员身份运行Visual Studio。当我去切换分支时,发生了错误。

我使用GitEx的,我运行它作为一个普通用户和VS创建的文件,而作为一个管理员(运行作为管理员,还是我)无法访问。这是我的根本原因。我不知道为什么会发生在这种情况下,因为我经常运行VS作为管理员在我的主要开发环境,以前没有遇到过这个问题。但是由于某种原因,今天上述情况导致VS在该会话期间生成的任何文件是不可编辑的……你可以读取它们,但不能更改或删除它们,这正是Git在你切换分支时要做的。

要解决Git的问题,我必须以管理员身份启动Windows资源管理器,并获得所有权并重新授予自己对有问题的文件和目录的权限。我不完全理解为什么会这样,因为我也以管理员身份运行资源管理器,但它确实如此。

您可以单独为文件执行此操作,但我最终为分支的根文件夹执行此过程。

所以我解决问题的确切步骤是:在Windows资源管理器中进入分支的顶部,右键单击目录的属性,选择安全选项卡,打开高级安全设置对话框的高级选项,在顶部选择更改所有权(它可能显示您已经拥有它),我重新选择了自己。然后它会返回到“高级安全设置”对话框,在底部记得选中“替换所有对象…”框然后单击应用系统循环遍历每个文件和文件夹固定所有权,为我解决了问题。

对我来说,它锁定了我的迁移文件夹,不允许我切换分支……所以我最初只是修复了允许我切换分支的目录和子树,但我关闭了VS试图解决这个问题。当我重新打开VS时,我没有以管理员的身份运行VS,我发现现在无法编译解决方案!这是相同的\类似的问题。它无法编译解决方案,因为所有的obj目录现在都是不可编辑的……所以当我做了上述步骤,一切又好起来了。

希望这能帮助到别人…;)

我通过以管理员身份重新启动PHPStorm(插入您的程序)解决了这个问题

正如上面的答案中提到的,是的文件必须被其他java进程使用,摆脱它的简单方法是,只需杀死所有java进程,然后执行git pull我这样做了,它对我有用。

对于windows关闭所有java进程:

taskkill /F /IM java.exe

Linux关闭所有java进程:

kill -9 `pidof java`

您可能会在Git 2.29(2020年第四季度)中较少看到该错误:MinGW上的“解除关联”仿真已得到优化。

提交680e0b4(2020年8月17日)byJeff Hostetler(#0)
(合并于提交5a04826中的Junio C Hamano----#0----,2020年8月19日)

mingw:提高mingw_unlink()的性能

签名人:Jeff Hostetler
签名人:Johannes Schindelin

更新mingw_unlink()以在尝试强制之前首先尝试删除具有现有权限的文件。

Windows在尝试删除只读文件时抛出错误。
mingw_unlink()兼容性包装器总是在调用_wunlink()之前尝试_wchmod(666)文件以避免该错误。
但是,由于工作树中的大多数文件已经是可写的,因此这通常是浪费精力。

更新mingw_unlink()直接调用DeleteFileW(),如果成功则返回。
如果失败,则返回到现有代码路径以更新权限并使用_wunlink()获取现有错误代码映射。

对于我来说,我必须进入我的. git文件夹并删除index.lock文件。之后,我可以像往常一样撤消。

如果您的os主机是类似linux/unix的,您可以运行git gc --force来停止使用git文件的文件处理程序,

否则,如果您在Windows上工作,您可以通过任务管理器或进程管理器停止git进程。似乎有另一个git进程正在使用您的git文件。只需杀死git进程