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


571

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

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

那是什么意思?



[Git rebase可能重复出现'文件取消链接失败'错误](stackoverflow.com/questions/3698369/…
Josh Lee 2010年

给定的答案对您
有用

1
还要检查git进程对该文件具有写权限。
boileau 2014年

Answers:


750

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

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

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


53
在Windows上,使用ProcessExplorer查找哪个进程打开了文件。
Dave

2
有没有办法编写脚本,例如“如果无法删除该文件(例如,该文件不存在),则跳过该文件”。
2xMax 2014年

14
就我而言,这是Visual Studio及其Git插件。
米哈尔Powaga

8
在Windows上,如果没有可用的ProcessExplorer或不想下载它,则可以运行(Windows + R)“ resmon”,转到CPU选项卡,然后在“关联标识符”文本框中搜索文件名。
拉斐尔

6
如果您使用GitKraken命令,例如重新设置,则可能会收到此消息
mtpultz

285

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


43
git pullgit gc自动启动,并且gc尝试访问一些.pack和.inx文件。这些由拥有git pull命令的“ windows git”进程持有。git gc手动运行,然后- git pull确实解决了问题。
Nikita

4
在运行git gc,我再次得到了同样的错误时gc正在进行
普拉卡什ķ

4
“手动运行git gc会比git pull真正解决问题。” 这有帮助。谢谢妮基塔。
sangam,

这也对我有帮助。使用Git Bash在Windows上运行该程序
Ascalonian'1

启动git pull之后,我得到了这个错误。我按CTRL + C停止拉动,运行git gc,然后再次进行git pull,问题消失了,中断拉动也没有破坏任何东西。
丹尼尔·史派

84

从该解决方案在这里为我工作:

这是Windows的特定答案,因此我知道它与您无关...我只是为了将来的搜索者而包括了它。

就我而言,这是因为我是从非提升命令行运行Git的。“以管理员身份运行”为我修复了该问题。


2
为我工作。以管理员身份运行VS,然后从VS
Sentinel

3
I:键入Ctrl+C以终止很长的不可链接文件列表;退出gitbash,我的IDE和GitHub Windows应用程序;以提升的“以管理员身份运行”模式重启gitbash;然后跑了git gc --aggressive。花了一段时间才能完成,但没有出错。
Mark McClelland

如果您认为这是重复项,则应将其标记为这样,而不要添加指向另一个答案的答案
Liam

2
@Liam这个问题比较老,但是这个答案仅在另一个问题上,而且这个问题不仅只有一个答案,这使得将一个重复设置为一个难度更大。
sepehr

这对我来说效果很好。先前的答案都没有。非常感谢。
罗伯托·罗德里格斯

35

我在执行时遇到此问题git pull

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


我在Windows计算机上遇到了此问题,该解决方案最初并未起作用。但是,一旦我从管理命令提示符处运行了此命令,它确实解决了我的问题。
威廉W

23

就我而言,没有任何进程可以处理文件或目录。如果路径很长,可能是由于操作系统限制(Windows)而发生的。尝试如下所示在全局git配置中启用longpath支持标志:

git config --global core.longpaths true

或尝试设置是/否答案标志(如果它对您没有冲突)

set GIT_ASK_YESNO=false

如果路径太长,则找不到成功的解决方案。


5
我不知道为什么,但是设置“ git config --global core.longpaths true”对我有帮助。
Maxim 2014年

GIT_ASK_YESNO,找不到有关此信息。它从何而来 ?
majkinetor

参见:例如stackoverflow.com/questions/3698369/…;我现在不知道它是否适用于最新版本的git(2.9)
andhdo

core.longpaths附加功能:重置--hard prune gc对我
有用


10

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

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

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

这为我带来了魔力。


这是对我而言唯一
有用的

10

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

怎么git gc办?

git gc 删除可能由先前的git add调用创建的无法访问的对象。

什么时候运行git gc

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

如何使其可自动配置?

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

git config --global gc.auto 0

8

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

杀死它可以使我运行“ git gc”而没有更多问题。TortoiseGit启动了上述过程,因此无需手动重新启动它。


7

我在Windows 7上遇到过此类问题,事实证明这是由于某些孤立git.exe过程引起的。

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

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


7

我在Windows中遇到了这个问题。我关闭了IDE(Android Studio),并在git shell中选择了YES。有效。


5

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

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

也许gc进程由于某种原因没有正常停止。


它也适用于
Windows10。– oguzhan

4

我的.tmp文件/.git/objects/pack夹中的文件存在此问题。我认为在推或拉过程中发生了某些故障,因此我删除了这些临时文件并将HEAD重置为我的最后一次提交。不知道是否建议这样做,但对我有用。也git count-objects -v给了我的列表.tmp未在包文件夹属于文件。

或者在窗口中取消显示y / n消息git open cmd.exe并运行:

SETX GIT_ASK_YESNO false

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


运行后git gcgit count-objects -v有助于识别pack文件夹中剩余的临时对象。
mistaecko

4

我可以通过以管理员身份打开Powershell并从那里解决问题 git checkout <branch_name>


谢谢@ bar-horing。这帮助我将其识别为许可问题。一旦我修复了该文件夹的Windows权限,它就会起作用。
库马尔

3

我在做“ git pull”时也遇到了同样的问题。我尝试了手动整理git命令'git gc',它解决了我的问题。


4
虽然这一个尝试,但不会添加其他答案(例如this)尚未涵盖的任何内容。如果您试图确认该解决方案有效,或者想感谢该答案的作者,请不要发布答案。当你获得更多的口碑,您将获得足够的权限给予好评你喜欢的答案,这是说谢谢的堆栈溢出的方式。
Scott Weldon


2

经过尝试各种解决方案终于git clean -f对我有所帮助。

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


2

如上所述,还有其他内容正在保存文件。问题是该程序对我们来说似乎并不可疑。打开GitKraken时,我试图从控制台进行git pull。关闭GitKraken解决了该问题。


2

运行后命令

git rm -rf foo.bar

我看到错误

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

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

git rm -rf foo.bar

我看到文件已被删除。


1

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

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


1

我遇到了同时运行git Bash和Eclipse EGit的问题。解决方案:关闭Eclipse。git gc以@khilo的方式运行也不会受到伤害。



1

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


1

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


1

我尝试了此页面上的每条提示,但没有任何帮助。我在做a git fetch和a git reset --hard origin/development给了我未知的错误。我无法重置为最新提交。

帮助的是签出另一个分支,然后签出上一个分支。很奇怪,但是它解决了问题。


1

如果关闭您的IDE并运行此处列出的各种git命令无济于事,请尝试手动杀死所有正在运行的Java进程。我的eclipse可能留下了一个Java进程,以某种方式使配置文件保持打开状态。


1

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

docker ps -a

要阻止它们,只需运行

docker stop <container name or container id>

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


1

为我工作,在Windows上尝试过:

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

Intellij / Ecllipse或任何它都可以。


0

在Windows上git clone,在(相当大的)存储库中看到此错误。关闭SmartGit并暂停我的备份软件(CrashPlan),然后运行。不确定2个中的哪个成功了,但是如果运行其中一个,这也可能为您完成。


0

进行git pull时,我遇到了同样的问题,如上所述,这是因为程序保留了这些文件并且不允许进行git pull。结束程序很有帮助。通常,从中检入文件的IDE(如Eclipse)会将其保留在后台。关闭相同的文件并重新运行git pull可以为我解决问题。


0

我遇到了同样的错误,并关闭了打开文件的应用程序,从而解决了该问题。我可以回去按“ Y”

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.