【问题标题】:Unlink of file Failed. Should I try again?取消文件链接失败。我应该再试一次吗?
【发布时间】:2010-12-08 16:32:40
【问题描述】:

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

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

这意味着什么?

【问题讨论】:

  • 可能重复 [Git rebase got 'unlink of file failed' 错误](stackoverflow.com/questions/3698369/…)
  • 给定的答案是否对您有用,如果流程查看器不起作用,则重新启动,然后您可以删除文件,如果它对您有用,您也可以接受答案
  • 还要检查 git 进程对该文件是否有写权限。
  • Unlink of file failed的可能重复

标签: git unlink


【解决方案1】:

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

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

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

【讨论】:

  • 在 Windows 上,使用 ProcessExplorer 查找打开文件的进程。
  • 在我的例子中是 Visual Studio 及其 Git 插件。
  • 在 Windows 上,如果您没有可用的 ProcessExplorer 或不想下载它,您可以运行 (Windows + R) "resmon",转到 CPU 选项卡并搜索文件名在“关联标识符”文本框中。
  • 如果你使用GitKraken,如果你执行rebase之类的命令,你可能会得到这个
  • 打开GitKraken时出现问题。
【解决方案2】:

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

【讨论】:

  • git pull 自动启动git gc,并且 gc 尝试访问一些 .pack 和 .inx 文件。这些由拥有git pull 命令的“windows git”进程持有。手动运行 git gc 而不是 - git pull 确实解决了问题。
  • 在运行git gc 时,当gc 正在进行时,我又遇到了同样的错误
  • “手动运行 git gc 而不是 - git pull 确实解决了这个问题。”这有帮助。谢谢尼基塔。
  • 这对我也有帮助。使用 Git Bash 在 Windows 上运行它
  • 启动 git pull 后出现此错误。我按 CTRL+C 停止拉取,运行 git gc 然后再次 git pull,问题消失了,中断拉取没有任何问题。
【解决方案3】:

here 的这个解决方案对我有用:

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

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

【讨论】:

  • 为我工作。以管理员身份运行 VS,然后从 VS 启动命令提示符
  • I:输入Ctrl+C 以终止很长的不可链接文件列表;退出 gitbash、我的 IDE 和 GitHub Windows 应用程序;以提升的“以管理员身份运行”模式重新启动 gitbash;并运行git gc --aggressive。花了一段时间才完成,但没有出错。
  • 如果您认为这是重复的,您应该将其标记为这样,而不是添加指向另一个答案的答案
  • @Liam 这个问题比较老,但这个答案只针对另一个问题,而且这个问题不仅有一个答案,因此很难将其设置为重复。
  • 这对我来说效果很好。以前的答案都没有。非常感谢。
【解决方案4】:

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

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

【讨论】:

  • 我在 Windows 机器上遇到了这个问题,这个解决方案最初并没有奏效。但是,一旦我从管理员命令提示符运行此命令,它确实解决了我的问题。
【解决方案5】:

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

git config --global core.longpaths true

如果对您没有冲突,请尝试设置是/否回答标志

set GIT_ASK_YESNO=false

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

【讨论】:

  • 我不知道为什么,但是设置“git config --global core.longpaths true”对我有帮助。
  • GIT_ASK_YESNO,找不到关于这个的信息。它来自哪里?
  • 参见:stackoverflow.com/questions/3698369/… 例如;如果它适用于 git (2.9) 的最新版本,我现在不支持
  • core.longpaths with additional: reset --hard prune gc 为我工作 - 但必须关闭 AndroidStudio 以免弄乱它的内置工具
【解决方案6】:

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

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

  2. 从命令行打开 git(在我的情况下我有 git bash)并运行 git gc,正如其他人提到的那样。

这对我来说很神奇。

【讨论】:

  • 这是唯一对我有帮助的答案,使用 Android Studio
【解决方案7】:

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

git gc 会做什么?

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

何时运行git gc

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

如何让它自动配置?

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

git config --global gc.auto 0

【讨论】:

    【解决方案8】:

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

    【讨论】:

      【解决方案9】:

      我在 Windows 7 上遇到过此类问题,结果证明是由于某个孤立的 git.exe 进程造成的。

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

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

      【讨论】:

        【解决方案10】:

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

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

        【讨论】:

          【解决方案11】:

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

          【讨论】:

            【解决方案12】:

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

            【讨论】:

            • 谢谢@bar-horing。这帮助我将其识别为权限问题。一旦我修复了该文件夹的 Windows 权限,它就可以工作了。
            • 我也是,在 Win Server 16 上以管理员身份运行 cmd :)
            【解决方案13】:

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

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

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

            【讨论】:

            • 对 Windows 10 也有效。
            【解决方案14】:

            /.git/objects/pack 文件夹中的 .tmp 文件有这个问题。我认为在推送或拉取过程中出现了一些问题,所以我删除了这些临时文件并将 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

            【讨论】:

            • 运行git gc 后,git count-objects -v 有助于识别pack 文件夹中剩余的临时对象。
            【解决方案15】:

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

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

            【讨论】:

              【解决方案16】:

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

              【讨论】:

              【解决方案17】:

              运行命令后

              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
              

              我看到文件已被删除。

              【讨论】:

                【解决方案18】:

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

                【讨论】:

                  【解决方案19】:

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

                  docker ps -a

                  要阻止它们,只需运行

                  docker stop <container name or container id>

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

                  【讨论】:

                    【解决方案20】:

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

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

                    【讨论】:

                      【解决方案21】:

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

                      【讨论】:

                        【解决方案22】:

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

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

                        【讨论】:

                          【解决方案23】:

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

                          【讨论】:

                            【解决方案24】:

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

                            【讨论】:

                              【解决方案25】:

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

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

                              【讨论】:

                                【解决方案26】:

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

                                【讨论】:

                                  【解决方案27】:

                                  为我工作,在 Windows 上试用:

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

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

                                  【讨论】:

                                    【解决方案28】:

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

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

                                    taskkill /F /IM java.exe
                                    

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

                                    kill -9 `pidof java`
                                    

                                    【讨论】:

                                      【解决方案29】:

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

                                      【讨论】:

                                        【解决方案30】:

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

                                        【讨论】:

                                          猜你喜欢
                                          • 2020-10-09
                                          • 1970-01-01
                                          • 1970-01-01
                                          • 2014-11-21
                                          • 1970-01-01
                                          • 1970-01-01
                                          • 1970-01-01
                                          • 1970-01-01
                                          • 2018-12-14
                                          相关资源
                                          最近更新 更多