【问题标题】:Why do I get "fatal: git status --porcelain failed"?为什么我会收到“致命:git status --porcelain failed”?
【发布时间】:2011-07-24 07:44:51
【问题描述】:

这是一个巨大的痛苦。我以前遇到过几次,我不明白为什么。 5 分钟前,repo 很好并且可以正常工作,我移动了一些文件(这很酷)并且 git 大便它的裤子。知道为什么会这样吗?除了克隆 repo、移动文件等之外,我该如何修复它...

【问题讨论】:

    标签: git versioning


    【解决方案1】:

    天哪,我太失败了。看起来问题源于 Flash Builder 将其他 .git 存储库复制到子文件夹中。答案是删除所有不属于 repo 的 .git 文件夹。

    【讨论】:

    • 我不知道我还有一些来自旧子模块的 .git 相关文件 - 在我删除它们之后,我又回到了黑色。
    • 实际上可能需要从 vendor 文件夹中删除 .git 文件夹,该文件夹仅包含有问题的依赖项。在目标回购通过一些变基之后,@dev 依赖关系发生在我身上。
    • 谢谢,这正是发生在我身上的事情。 Flash Builder 将 .git 文件夹复制到 bin-debug 文件夹。我不知道那是怎么发生的。为什么 Flash Builder 会将 .git 文件夹复制到 bin-debug 中?
    • 我执行了 find search-location/ -name '.git' 这为我提供了子目录中所有 .git 文件夹的位置。我删除了除主要的以外的所有内容,这解决了问题。
    • 子模块中的git pull 可能会发生这种情况。
    【解决方案2】:

    由于损坏/未正确初始化的子模块(带有自己的 .git 子文件夹),我遇到了这个错误。我暂时删除了子模块文件夹并在主项目的根目录中使用了git init。为我解决了这个问题。

    【讨论】:

    • 这也是我的原因,但除了删除子模块文件夹之外,我还必须重新运行 git submodule init && git submodule update
    【解决方案3】:

    我知道这是一个旧线程,但我只是遇到了同样的问题并最终以不同的方式解决。 git init 对我不起作用。 在这里发帖,以防对其他人有用。

    我的存储库有两个子模块。 变基后,我开始收到错误 fatal: git status --porcelain failed

    解决方案是验证每个子模块 config 文件中的属性 worktree - 例如<repository-checkout>/.git/modules/<submodule-name>/config.

    worktree 属性的路径无效。它链接到一个不存在的文件夹,该文件夹已更改并合并到 master - 可能是由于解决冲突的错误。

    【讨论】:

      【解决方案4】:

      如果它对其他人有帮助,我刚刚遇到了同样的问题,发现在项目根目录中运行 git init 可以解决它。

      【讨论】:

      • 很好的建议。必须在子模块中git init,问题确实消失了。谢谢!
      【解决方案5】:

      我遇到了同样的问题。在我的根项目目录中运行 git status 会产生以下错误:

      fatal: This operation must be run in a work tree
      fatal: 'git status --porcelain' failed in submodule js/object-subscribe
      

      在受影响的子模块 (js/object-subscribe) 中运行 git status 会产生此错误:

      fatal: This operation must be run in a work tree
      

      在该子模块的文件夹中运行 git init 为我做了。

      【讨论】:

        【解决方案6】:

        在我的情况下,使用带有 git 2.12.2 的 git mv moduleA moduleBmoduleA/mySubmodule 移动到 moduleB/mySubmodule 后,我遇到了以下错误:

        $ git status
        fatal: Could not chdir to '[../]moduleA/mySubmodule': No such file or directory
        fatal: 'git status --porcelain' failed in submodule mySubmodule
        fatal: 'git status --porcelain' failed in submodule moduleB
        

        然后我做了以下(可能不是这个顺序)

        1. 手动将.gitmodules 条目更新为moduleB
        2. 输入.git/modules并重命名旧模块文件夹
        3. 输入moduleB并删除子模块文件夹
        4. 运行git submodule syncgit submodule update

        之后,我可以毫无问题地再次运行git status

        【讨论】:

          【解决方案7】:

          通常,git会在项目的根目录(.git/)中创建一个隐藏目录

          当您在 CMS 上工作时,您可以安装带有 .git/ 目录的模块/插件,其中包含特定模块/插件的 git 元数据

          如果您不想使用 git 的子模块功能,最快的解决方案是删除除根 git 元数据目录之外的所有 .git 目录。 如果这样做,git 不会将这些模块视为项目子模块。

          cd /path/to/your/project/code
          find ./ | grep ".git/index"
          

          一旦找到删除“.git”除根目录之外的所有目录,但如果您删除它,则再次初始化您的回购

          【讨论】:

            【解决方案8】:

            .git 是子模块中的一个文件,指向位于您的根目录.git 中的一个目录。

            就我而言,我在 docker 中安装了一个 git 目录并在那里检查状态。此子模块的 .git 文件包含在 docker 中无效的绝对路径。我编辑了这个.git 文件以将 gitdir 路径更改为相对路径

            Git 版本:2.7.4

            【讨论】:

            • 这个!一百万倍!确保这些路径是相对的!
            【解决方案9】:

            我设法解决了以下问题:

            假设子文件夹是我遇到问题的子模块,我移动/删除了文件夹然后同步然后更新...

            mv AD_Soft/子文件夹 AD_Soft/subfolder2 git submodule sync --recursive AD_Soft/subfolder/ git submodule update --recursive AD_Soft/子文件夹

            这解决了我的问题..

            【讨论】:

              【解决方案10】:

              我的仓库中没有任何 .git 文件夹,但每当我将新文件复制到文件夹中以更新我的应用程序时,我仍然会收到索引损坏瓷器失败错误。我不明白更新文件会如何破坏它或如何修复它。有人对此有进一步的了解吗?

              【讨论】:

              • 所以你在整个目录结构中只有一个 .git 文件夹?
              • 我想通了。出于某种原因,我在应用程序/插件目录中的一个蛋糕插件一直导致它中断。我花了大约 3 个小时更换每个文件夹,直到找到一个。我认为这只是我在某处发现的糟糕代码,最近甚至没有使用它。删除了那个文件夹,一切都很完美。谢谢。
              • 即使我自己没有创建任何cake 插件,全新安装npm 的任何CoffeeScript 模块,特别是grunt 模块,是否可能会发生这种情况?
              • 这根本不是答案!顺便说一句,/this/ 不是论坛。
              【解决方案11】:

              对我来说这是不同的,git init 也没有解决问题,worktree 也没有错。 我遇到的错误是

              fatal: unable to create threaded lstat
              fatal: 'git status --porcelain=2' failed in submodule ext/hdf5
              

              我的解决方案是git gc

              【讨论】:

                【解决方案12】:
                git remote -v
                #now run the same commands 
                git remote add origin remote-repository-url.git
                git push origin master
                

                // 效果很好

                【讨论】:

                  【解决方案13】:

                  从模块中删除 .git 文件夹。如果您想将来使用它,请保留该文件夹的备份。

                  【讨论】:

                  • 来自子模块。 (在我的例子中,.git 是通过在子模块中意外运行 git pull 而创建的。)
                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 2020-09-10
                  • 2020-09-18
                  • 1970-01-01
                  • 1970-01-01
                  • 2020-11-25
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多