737

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

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

那意味着什么?

4

37 回答 37

997

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

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

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

于 2011-05-20T19:35:51.147 回答
337

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

于 2014-10-07T06:16:55.543 回答
99

这个解决方案对我有用

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

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

于 2015-02-21T08:06:03.993 回答
46

我在做git pull.

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

于 2015-08-18T05:05:52.850 回答
26

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

git config --global core.longpaths true

或尝试设置是/否答案标志,如果它对您不冲突

set GIT_ASK_YESNO=false

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

于 2014-08-13T13:26:05.670 回答
14

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

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

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

这对我来说很神奇。

于 2017-09-29T17:10:22.290 回答
14

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

git gc会做什么?

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

什么时候跑git gc

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

如何使其可自动配置?

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

git config --global gc.auto 0
于 2018-05-29T13:40:53.383 回答
11

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

于 2018-07-20T11:27:26.740 回答
8

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

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

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

于 2015-06-16T08:36:02.450 回答
8

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

杀死它使我可以运行“git gc”而没有任何问题。上面的过程是由 TortoiseGit 启动的,所以不需要手动重启。

于 2015-07-31T04:39:16.110 回答
8

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

然后我可以毫无问题地切换分支并合并,试试git gc --force.

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

于 2016-01-21T09:49:48.220 回答
8

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

于 2016-05-18T13:50:01.033 回答
8

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

于 2019-01-07T15:04:24.547 回答
4

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

或者在 Windows 中抑制 y/n 消息git open cmd.exe并运行:

SETX GIT_ASK_YESNO false

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

于 2014-09-15T19:01:16.823 回答
3

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

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

于 2016-02-02T12:47:26.533 回答
3

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

于 2016-11-08T11:04:58.180 回答
3

运行命令后

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

我看到文件已被删除。

于 2017-12-25T03:22:04.467 回答
2

如上所述,其他东西正在保存这些文件。问题是该程序对我们来说看起来并不可疑。我试图在打开 GitKraken 的同时从控制台执行 git pull。关闭 GitKraken 解决了这个问题。

于 2017-09-05T13:54:54.973 回答
2

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

docker ps -a

要阻止它们,只需运行

docker stop <container name or container id>

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

于 2019-04-25T01:48:25.623 回答
1

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

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

于 2015-01-13T08:22:25.523 回答
1

我在同时运行 git Bash 和 Eclipse EGit 时遇到了这个问题。解决方法:关闭 Eclipse。git gc正如@khilo 提到的那样运行也不会受到伤害。

于 2015-02-05T19:52:15.363 回答
1

在上述答案似乎都不起作用之后,跑步git fetch -p为我完成了这项工作。

https://git-scm.com/docs/git-fetch

于 2016-04-20T11:26:41.113 回答
1

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

于 2016-05-17T15:02:46.113 回答
1

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

于 2018-03-09T08:49:10.540 回答
1

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

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

于 2018-08-01T18:52:04.427 回答
1

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

于 2019-03-12T07:22:32.857 回答
1

为我工作,在 Windows 上试过:

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

Intellij/Ecllipse 或任何,它都会工作。

于 2019-09-18T14:45:13.763 回答
1

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

对于 windows 杀死所有 java 进程:

taskkill /F /IM java.exe

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

kill -9 `pidof java`
于 2020-08-03T06:31:53.073 回答
0

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

于 2017-10-02T20:44:18.757 回答
0

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

于 2017-10-16T14:14:31.820 回答
0

我有同样的错误并关闭打开文件的应用程序解决了它。我能够返回并按“Y”

于 2018-02-08T01:50:59.687 回答
0

在我的情况下,该特定文件打开了一个复制或替换窗口,因此出现了取消链接错误。我关闭它并且没有取消链接错误

于 2019-01-04T06:48:48.923 回答
0

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

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

于 2019-09-24T17:38:05.640 回答
0

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

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

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

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

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

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

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

于 2019-11-20T22:25:46.337 回答
0

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

于 2019-11-27T06:42:57.097 回答
0

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

请参阅Jeff Hostetler ( ) 的提交 680e0b4(2020 年 8 月 17 日(由Junio C Hamano 合并 -- --提交 5a04826中,2020 年 8 月 19 日)Jeff-Hostetler
gitster

mingw: 提高性能mingw_unlink()

签字人:Jeff Hostetler
签字人:Johannes Schindelin

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

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

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

于 2020-08-30T21:31:50.193 回答
0

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

于 2021-03-31T23:30:19.773 回答