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

Pol*_*Pol 520 git unlink

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

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

这意味着什么?

小智 667

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

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

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

  • 在Windows上,使用ProcessExplorer查找打开文件的进程. (45认同)
  • 在我的情况下,这是Visual Studio及其Git插件. (13认同)
  • 在Windows中,如果你没有可用的ProcessExplorer或不想下载它,你可以运行(的Windows + R)"resmon",进入CPU选项卡,在"相关标识符"文本框搜索文件名. (6认同)
  • 当 GitKraken 打开时,我遇到了这个问题。 (3认同)
  • 有没有办法写一个脚本,如"如果这个文件不能删除(例如文件不存在),只需跳过文件". (2认同)
  • 谢谢@ dave-c,使用Process Explorer搜索(Process Explorer> Ctrl + F>文件名),使用您的文件查找PID并杀死它 (2认同)
  • @Raphael 我想您可能在 Windows 10 上的资源监视器的 CPU 选项卡中提到了“关联句柄”。除此之外,在我的情况下,没有列出相关文件,我仍然遇到问题。为了解决它,我只是重新启动了文件资源管理器,看起来它仍然有一个句柄,而没有出现在“关联句柄”列表中。 (2认同)
  • 如果您使用`GitKraken`,则执行诸如rebase之类的命令时可能会得到此信息 (2认同)

小智 262

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

  • `git pull`自动启动`git gc`,gc试图访问一些.pack和.inx文件.这些是由"windows git"进程持有的,它拥有`git pull`命令.手动运行`git gc`而不是 - "git pull"真正解决了这个问题. (38认同)
  • 运行`git gc`时,当`gc`正在进行时,我再次遇到同样的错误 (3认同)
  • “手动运行git gc会比git pull真正解决问题。” 这有帮助。谢谢妮基塔。 (3认同)
  • 这也对我有帮助。使用 Git Bash 在 Windows 上运行它 (2认同)

sep*_*ehr 78

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

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

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

  • 我:键入`Ctrl + C`来终止很长的不可链接文件列表; 退出gitbash,我的IDE和GitHub Windows应用程序; 在提升的"以管理员身份运行"模式下重新启动gitbash; 然后跑了`git gc --aggressive`.花了一段时间才完成,但没有任何错误. (3认同)
  • 为我工作.以VS为管理员,然后从VS启动命令提示符 (2认同)
  • @Liam这个问题比较老,但这个答案只针对另一个问题,而且这个问题不仅有一个答案,而且很难将一个问题设置为重复. (2认同)

小智 33

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

我试过git gc,它解决了我的问题.


and*_*hdo 17

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

git config --global core.longpaths true
Run Code Online (Sandbox Code Playgroud)

或尝试设置是/否答案标志,如果它没有冲突

set GIT_ASK_YESNO=false
Run Code Online (Sandbox Code Playgroud)

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

  • 我不知道为什么,但设置"git config --global core.longpaths true"对我有帮助. (4认同)

pap*_*gee 9

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

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

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

这对我来说是神奇的.


Ram*_*nti 9

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

怎么git gc办?

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

什么时候跑git gc

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

如何使其自动配置?

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

git config --global gc.auto 0
Run Code Online (Sandbox Code Playgroud)


小智 9

我试过git gc,它解决了我的问题.


小智 8

在我的情况下(Win8.1,运行TortoiseGit),正在锁定文件的过程称为"TortoiseSVN状态缓存".

杀死它让我可以运行"git gc"而不会出现任何问题.上面的过程由TortoiseGit启动,因此无需手动重启.


Bar*_*ing 8

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


jak*_*b.g 7

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

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

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


vov*_*ost 6

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


Mar*_*ard 5

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

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

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