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

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个回答

2
如上所述,有其他东西在占用这些文件。问题是那个程序对我们来说看起来并不可疑。 我试图从控制台执行git pull命令,同时GitKraken也打开了。关闭GitKraken后问题得到解决。

2
我在同时运行git Bash和Eclipse EGit时遇到了这个问题。 解决方案:关闭Eclipse。如@khilo所提到的,运行git gc也是一个好主意。

2
如果你正在使用Docker并且运行在Windows 10上,你可能需要停止正在运行文件的容器。要显示容器的状态,请运行以下命令:docker ps -a。要停止它们,只需运行docker stop <container name or container id>即可。我使用.sh文件来运行我的本地文件,这个方法对我有效。"最初的回答"

1
在我的情况下,原因是当天早些时候我已经以管理员身份运行了Visual Studio。当我去切换分支时出现了错误。
我使用GitExtensions并将其作为普通用户运行,而在以管理员身份运行VS时创建的文件(尽管仍然是我)无法访问。对我来说,这是问题的根源。我不确定为什么会发生在这种情况下,因为我经常在主要开发环境上以管理员身份运行VS,之前没有遇到过这个问题。但出于某种原因,今天上述情况导致了任何由VS在那个会话期间生成的文件都无法编辑...你可以阅读它们,但不能更改或删除它们,而这正是Git在切换分支时要做的事情。
为了解决Git的问题,我不得不以管理员身份启动Windows资源管理器,并取得对涉及的文件和目录的所有权并重新授予自己权限。我不完全理解为什么会这样,因为我也以管理员身份运行资源管理器,但它确实起作用了。
您可以逐个文件地执行此操作,但我最终为该分支的根文件夹执行了此过程。
所以,我解决问题的具体步骤是: 在Windows资源管理器中进入分支的顶部, 右键单击目录属性, 选择"安全"选项卡, 高级选项打开"高级安全设置"对话框, 在顶部选择更改所有权(可能会显示您已经拥有它), 然后我重新选择了自己。 然后它会将您返回到“高级安全设置”对话框,在底部要记得勾选“替换所有对象...”框。 然后点击应用 系统逐个文件和文件夹地循环修复所有权,这样问题就解决了。
对我来说,它锁定了我的迁移文件夹,不允许我切换分支...所以我最初只是修复了那个目录和子树,这使我能够切换分支,但我关闭了VS尝试解决这个问题。当我重新打开VS时,我没有以管理员身份运行VS,我发现现在无法编译解决方案!这是相同或相似的问题。由于现在所有的obj目录都是不可编辑的...所以这就是我做以上步骤的原因,而且一切都恢复正常了。
希望这可以帮助到某些人... ;)

1

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

解决方案是关闭我的机器上所有正在运行的Java进程。


1

1
我尝试了这个页面上的每一个提示,但都没有帮助。我正在执行git fetch,然后git reset --hard origin/development时出现了unkink错误。我无法重置到最新的提交。
解决问题的方法是检出另一个分支,然后再检出之前的分支。非常奇怪,但它解决了问题。

1
如果关闭IDE并运行此处列出的各种git命令无法解决问题,请尝试手动结束所有正在运行的Java进程。我有一个Java进程可能是从eclipse遗留下来的,它不知何故一直保持着一个配置文件的打开状态。

1

正如以上回答中所提到的,是的,文件可能会被其他Java进程使用,摆脱它的简单方法是杀死所有Java进程,然后执行 git pull。我已经这样做了,对我有效。

对于Windows,请杀死所有Java进程:

taskkill /F /IM java.exe

对于Linux,杀死所有Java进程:

kill -9 `pidof java`

1
在我的情况下,我试图在GitKraken的终端中运行git fetch --all。我不得不关闭GitKraken并从Windows终端运行该命令,才能使其正常工作。

这正是我的问题。在关闭GitKracken后,git 尝试运行的 gc 命令成功了。 - WBuck

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