我的本地 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 文件。之后,我可以像往常一样撤消。