我的本地 git 存储库中的一个文件出了点问题。当我尝试更改分支时,它说:
Unlink of file 'templates/media/container.html' failed. Should I try again? (y/n)
那意味着什么?
这可能意味着另一个程序正在使用该文件,这会阻止 git 在您尝试更改分支时将文件“移入”或移出工作目录。
我在 Windows Vista 上发生过这种情况,其中 eclipse 是“使用”该文件的程序。该文件可能实际上并未在 Eclipse 中打开,但可能已由 Eclipse 运行的进程打开。
在这种情况下,请尝试在任何可能使用过该文件的应用程序中关闭该文件。如果这不起作用,请完全退出任何可能打开该文件的应用程序。
我遇到了这个问题并通过以下命令解决了它:git gc
上述命令删除临时文件和不必要的文件。(垃圾收集器。)
这个解决方案对我有用:
这是一个 Windows 特定的答案,所以我知道它与你无关......我只是为了将来的搜索者的利益而将其包括在内。
就我而言,这是因为我从非提升的命令行运行 Git。“以管理员身份运行”为我修复了它。
我在做git pull.
我试过git gc了,它解决了我的问题。
在我的情况下,没有进程接触文件或目录。如果路径很长,可能会发生这种情况,因为操作系统限制(Windows)。尝试在全局 git 配置中启用长路径支持标志,如下所示:
git config --global core.longpaths true
或尝试设置是/否答案标志,如果它对您不冲突
set GIT_ASK_YESNO=false
如果路径太长,我还没有找到成功的解决方案。
这可能对某人有用;如果以上所有方法都不适合您,请按照下列步骤操作:
关闭您的 IDE(我的是 Eclipse,不确定它是否适用于 Intellij 和其他)或任何其他可能使用 git 的应用程序。
从命令行打开 git(在我的情况下,我有 git bash)并git gc按照其他人的说明运行。
这对我来说很神奇。
当我使用gitkraken和命令提示符时,我遇到了同样的问题。然后我运行 git gc命令它解决了我的问题。所以我很高兴并想分享一些可能有帮助的观点。
git gc会做什么?
git gc删除之前调用 git add 时可能创建的无法访问的对象。
什么时候跑git gc?
从doc中,鼓励用户在每个存储库中定期运行此任务,以保持良好的磁盘空间利用率和良好的运行性能。
如何使其可自动配置?
一些 git 命令可能会自动运行 git gc;有关详细信息,请参阅下面的 --auto 标志。如果您知道自己在做什么,并且您只想永久禁用此行为而无需进一步考虑,那就做
git config --global gc.auto 0
我试过git gc了,它解决了我的问题。
我在 Windows 7 上遇到了这种问题,结果是由于一些孤立的git.exe进程。
要解决它,请打开任务管理器并终止所有git.exe进程。
由于git命令是短暂的,您通常不会git.exe在任务管理器中看到任何命令。当它们在那里时,通常意味着出现问题,您应该终止这些进程。
在我的情况下(Win8.1,TortoiseGit 运行),锁定文件的是名为“TortoiseSVN 状态缓存”的进程。
杀死它使我可以运行“git gc”而没有任何问题。上面的过程是由 TortoiseGit 启动的,所以不需要手动重启。
在 Windows 8 上:我跑了git gc,它说git gc已经在运行,我跑git gc --force了,垃圾收集器也跑了。
然后我可以毫无问题地切换分支并合并,试试git gc --force.
也许这个gc过程并没有因为某种原因而优雅地停止。
我在 Windows 中遇到了这个问题。我关闭了我的 IDE(Android Studio)并在 git shell 中选择了 YES。有效。
我可以通过以管理员身份打开 Powershell并从那里
解决这个问题git checkout <branch_name>
.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
在尝试了各种解决方案后终于git clean -f帮助了我。
编辑:我再次遇到了几次问题 - 关闭所有依赖于 git 的进程似乎有帮助(如 gitbash、Eclipse IDE 等)
我在做'git pull'时遇到了同样的问题。我尝试了手动管家 git 命令“git gc”,它解决了我的问题。
运行命令后
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
我看到文件已被删除。
如上所述,其他东西正在保存这些文件。问题是该程序对我们来说看起来并不可疑。我试图在打开 GitKraken 的同时从控制台执行 git pull。关闭 GitKraken 解决了这个问题。
如果您使用 Docker 并运行 Windows 10,您可能希望停止运行文件的容器。要显示容器的状态,请运行
docker ps -a
要阻止它们,只需运行
docker stop <container name or container id>
这对我有用,因为我正在使用 .sh 文件运行本地文件
这可能是一个单独的 gitk 窗口,正在运行以查看一些 git 历史记录。
只需关闭该窗口即可解决该问题。
我在同时运行 git Bash 和 Eclipse EGit 时遇到了这个问题。解决方法:关闭 Eclipse。git gc正如@khilo 提到的那样运行也不会受到伤害。
在上述答案似乎都不起作用之后,跑步git fetch -p为我完成了这项工作。
我在 Windows 中遇到了这个问题,您可能想以管理员身份运行 git bash,然后执行所需的命令,这为我解决了这个问题。
如果您正在开发 Web 应用程序,一个常见的原因是忘记关闭服务器。例如,这可能是一个简单的 Node.js 进程,或者在 Windows 上,您的 IIS 进程作为后台进程运行得更加隐蔽。
我尝试了此页面上的每一个提示,但没有任何帮助。我正在做 agit fetch和 agit reset --hard origin/development给了我 unkink 错误。我无法重置为最新的提交。
有什么帮助是检查另一个分支,然后检查前一个分支。很奇怪,但它解决了问题。
如果关闭 IDE 并运行此处列出的各种 git 命令无济于事,请尝试手动终止所有正在运行的 Java 进程。我有一个可能从 Eclipse 遗留下来的 Java 进程,它以某种方式保持配置文件处于打开状态。
为我工作,在 Windows 上试过:
停止从 IDE 运行的服务器或关闭 IDE
Intellij/Ecllipse 或任何,它都会工作。
正如上面的答案中提到的,是的文件可能必须被其他java进程使用,摆脱这个的简单方法是,只需杀死所有java进程然后执行git pull我这样做,它对我有用。
对于 windows 杀死所有 java 进程:
taskkill /F /IM java.exe
对于 Linux,杀死所有 java 进程:
kill -9 `pidof java`
在 Windows 上,在git clone一个(相当大的)存储库中看到了这个错误。关闭SmartGit并暂停我的备份软件 (CrashPlan),然后它就可以工作了。不确定这两个中的哪一个成功了,但如果运行任何一个,这也可能对你有用。
我在执行 git pull 时遇到了同样的问题,如上所述,这是因为一个程序保存了这些文件并且不允许 git pull。关闭程序有帮助。通常,从中签入文件的 IDE(如 Eclipse)会将其保存在后台。关闭相同并重新运行 git pull 为我解决了这个问题。
我有同样的错误并关闭打开文件的应用程序解决了它。我能够返回并按“Y”
在我的情况下,该特定文件打开了一个复制或替换窗口,因此出现了取消链接错误。我关闭它并且没有取消链接错误
对于我的 Spring Boot 项目,我在尝试运行时遇到了这个错误git stash。
解决方案是杀死我机器上运行的所有 Java 进程。
在我的情况下,原因是我在当天早些时候以管理员身份运行了 Visual Studio。当我去切换分支时,发生了错误。
我使用 GitExtensions 并以普通用户身份运行它,并且以管理员身份运行时由 VS 创建的文件(尽管以管理员身份运行,但仍然是我)无法访问。这就是我的根本原因。我不确定为什么会在这种情况下发生这种情况,因为我经常在我的主要开发环境中以管理员身份运行 VS,并且以前没有遇到过这个问题。但是今天出于某种原因,上述情况导致 VS 在该会话期间生成的任何文件都不可编辑……您可以阅读它们,但不能更改或删除它们,这正是 Git 在您切换分支时要做的事情.
为了解决 Git 的问题,我必须以管理员身份启动 windows 资源管理器并获得所有权并重新授予自己对相关文件和目录的权限。我不完全理解为什么会这样,因为我也以管理员身份运行资源管理器,但确实如此。
您可以单独为文件执行此操作,但我最终为分支的根文件夹执行此过程。
所以我解决问题的确切步骤是:转到Windows资源管理器中分支的顶部,右键单击目录的属性,选择安全选项卡,打开高级安全设置对话框的高级选项,选择更改所有权顶部(它可能表明你已经拥有它),我重新选择了自己。然后它会将您返回到“高级安全设置”对话框,记得在底部选中“替换所有对象...”框,然后单击应用系统循环通过每个文件和文件夹修复所有权,这为我解决了问题.
对我来说,它锁定了我的迁移文件夹并且不允许我切换分支......所以我最初只是修复了允许我切换分支的目录和子树,但我已经关闭了 VS 试图解决这个问题。当我重新打开 VS 时,我没有以管理员身份运行 VS,我发现现在无法编译解决方案!这是相同\类似的问题。它无法编译解决方案,因为所有 obj 目录现在都不可编辑......所以当我执行上述步骤时,一切都很好了。
希望这可以帮助某人... ;)
我通过以管理员身份重新启动 PHPStorm(改为插入您的程序)解决了这个问题
在 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()获取现有错误代码映射。
对我来说,我必须进入我的 .git 文件夹并删除 index.lock 文件。之后,我可以像往常一样撤消。