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

时间:2010-12-08 16:32:40

标签: git unlink

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

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

这意味着什么?

38 个答案:

答案 0 :(得分:587)

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

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

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

答案 1 :(得分:239)

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

答案 2 :(得分:69)

来自here的此解决方案为我工作:

  

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

     

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

答案 3 :(得分:32)

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

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

答案 4 :(得分:14)

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

git config --global core.longpaths true

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

set GIT_ASK_YESNO=false

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

答案 5 :(得分:8)

在我的情况下(Win8.1,运行TortoiseGit),这是一个名为" TortoiseSVN status cache"那是锁定文件。

杀了它让我跑了#34; git gc"没有任何问题。 上面的过程由TortoiseGit启动,因此无需手动重启。

答案 6 :(得分:7)

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

答案 7 :(得分:7)

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

git gc会做什么?

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

何时运行git gc

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

如何让它自动配置?

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

git config --global gc.auto 0

答案 8 :(得分:7)

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

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

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

  3. 这对我来说是神奇的。

答案 9 :(得分:5)

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

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

也许gc进程并没有因为某种原因而优雅地停止。

答案 10 :(得分:4)

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

答案 11 :(得分:4)

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

答案 12 :(得分:4)

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

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

由于git命令是短暂的,因此您通常不会在任务管理器中看到任何git.exe。当他们在那里时,通常意味着某些事情是错误的,你应该杀死这些过程。

答案 13 :(得分:4)

.tmp文件夹中的/.git/objects/pack文件存在此问题。我认为在推或拉期间出现了一些问题,所以我删除了这些临时文件并将HEAD重置为我上一次提交。不确定是否这是建议但它对我有用。另外git count-objects -v给了我一个不属于pack文件夹的.tmp文件列表。

或者禁止Windows git open cmd.exe中的y / n消息并运行:

SETX GIT_ASK_YESNO false

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

答案 14 :(得分:3)

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

答案 15 :(得分:2)

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

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

答案 16 :(得分:1)

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

答案 17 :(得分:1)

为我工作,在Windows上尝试过

从IDE

停止服务器运行或关闭IDE

Intellij / Ecllipse或任何它都可以使用。

答案 18 :(得分:1)

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

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

答案 19 :(得分:1)

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

关闭该窗口以解决该问题。

答案 20 :(得分:1)

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

答案 21 :(得分:1)

运行命令后

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

我看到文件已被删除。

答案 22 :(得分:1)

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

答案 23 :(得分:1)

如上所述,其他东西正在保存文件。事情是,程序看起来并不怀疑我们。 我试图从控制台做一个git pull,同时打开GitKraken。关闭GitKraken解决了这个问题。

答案 24 :(得分:1)

上述答案似乎都没有效果,运行git fetch -p为我完成了这项工作。

this

答案 25 :(得分:0)

如上述答案所述,yes文件可能必须由其他java进程使用,摆脱这种麻烦的简单方法是,只需杀死所有java进程,然后执行taskkill /F /IM java.exe 我就这样做了,我。

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

kill -9 `pidof java`

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

{
datafield : "report",
text : "Show report",
accessor : "link",
Cell : (e) => <a href={e.value}> {e.value} </a>
},

答案 26 :(得分:0)

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

请参见commit 680e0b4Jeff Hostetler (Jeff-Hostetler)(2020年8月17日)。
(由Junio C Hamano -- gitster --commit 5a04826中合并,2020年8月19日)

mingw:提高mingw_unlink()的性能

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

更新mingw_unlink(),首先尝试删除具有现有权限的文件,然后再强制执行该文件。

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

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

答案 27 :(得分:0)

我通过以管理员身份重新启动PHPStorm(改为插入程序)解决了此问题

答案 28 :(得分:0)

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

答案 29 :(得分:0)

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

我使用GitExtensions,我以常规用户身份运行它,并且以VS身份以管理员身份运行时创建的文件(以Administrator身份运行,但仍由我运行)无法访问。这是我的根源。我不确定在这种情况下为什么会发生这种情况,因为我经常在主要开发环境中以管理员身份运行VS,并且之前从未遇到过此问题。但是由于今天的某种原因,上述情况导致VS在该会话期间生成的任何文件都无法编辑...您可以读取它们,但不能更改或删除它们,而这正是Git在切换分支时要做的。

要解决Git的问题,我必须以管理员身份启动Windows资源管理器,并拥有所有权并重新赋予我有关问题文件和目录的权限。我还不完全理解为什么也要以管理员身份运行资源管理器,但是确实如此。

您可以分别对文件执行此操作,但是我最终对分支的根文件夹执行了此过程。

所以我要解决此问题的确切步骤是: 在Windows资源管理器中转到了分支的顶部, 右键单击目录的属性, 选择安全标签, 高级选项可打开“高级安全设置”对话框, 在顶部选择更改所有权(它可能表明您已经拥有它), 我重新选择了自己。 然后返回到“高级安全设置”对话框,请记住要选中“替换所有对象...”框的底部。 然后点击应用 系统遍历每个文件和文件夹的所有权,这为我解决了这个问题。

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

希望这可以帮助某人...;)

答案 30 :(得分:0)

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

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

答案 31 :(得分:0)

git clean -dxf

为我工作

答案 32 :(得分:0)

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

docker ps -a

要阻止它们,只需运行

docker stop <container name or container id>

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

答案 33 :(得分:0)

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

答案 34 :(得分:0)

在我的情况下,

有一个用于打开该特定文件的复制或替换窗口,因此出现了取消链接错误。我关闭了它,没有解除链接错误

答案 35 :(得分:0)

我遇到了同样的错误并关闭了打开文件的应用程序解决了它。我能够回去按下&#34; Y&#34;

答案 36 :(得分:0)

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

答案 37 :(得分:0)

在Windows上,在一个(相当大的)repo的git clone上看到了这个错误。已关闭SmartGit并暂停了我的备份软件(CrashPlan),之后就可以了。不确定这两个中的哪一个做了伎俩,但如果要么运行,这也可以为你做。