为什么我会“致命:git status --porcelain failed”?

时间:2011-03-28 08:58:25

标签: git versioning

这是一个巨大的痛苦。我之前已经有过几次了,我不明白为什么。 5分钟之前回购很好并且工作,我移动一些文件(这一切都很酷)和git poops它的裤子。知道为什么会这样吗?除了克隆回购,移动文件等之外,我该怎么办呢?

13 个答案:

答案 0 :(得分:44)

哦,亲爱的,我真是个失败者。看起来这个问题源于Flash Builder将其他.git repos复制到子文件夹中。答案是删除所有不是repo的文件夹。

答案 1 :(得分:7)

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

答案 2 :(得分:6)

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

答案 3 :(得分:6)

我知道这是一个老线程,但我遇到了同样的问题并最终以不同的方式解决。 git init对我有用。 在此处发布,以防对其他任何人有用。

我的存储库有两个子模块。 在重新定位后,我开始收到错误致命:git status --porcelain failed

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

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

答案 4 :(得分:3)

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

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

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

fatal: This operation must be run in a work tree

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

答案 5 :(得分:1)

在使用git 2.12.2使用moduleB/mySubmodulegit mv moduleA moduleB移至$ 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 之后的情况下,我遇到了以下错误:

.gitmodules

然后我做了以下(也许不是这个顺序)

  1. 手动将moduleB条目更新为.git/modules
  2. 输入moduleB并重命名旧模块文件夹
  3. 输入git submodule sync并删除子模块文件夹
  4. 运行git submodule updategit status
  5. 之后,我可以毫无问题地再次运行{{1}}。

答案 6 :(得分:0)

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

答案 7 :(得分:0)

通常,git会在项目的根目录(.git /)

中创建一个隐藏目录

当您在使用CMS时,可能会安装带有.git /目录的模块/插件,其中包含特定模块/插件的git元数据

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

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

一旦找到删除“.git”除了根目录之外的所有目录,但是如果你删除了它再次初始化你的仓库

答案 8 :(得分:0)

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

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

Git版本:2.7.4

答案 9 :(得分:0)

对我来说,情况有所不同,git init也没有解决问题,worktree也没有错。 我的错误是

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

对我来说,解决方法是git gc

答案 10 :(得分:0)

git remote -v
#now run the same commands 
git remote add origin remote-repository-url.git
git push origin master

//效果很好

答案 11 :(得分:0)

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

答案 12 :(得分:0)

我设法解决了以下问题:

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

mv AD_Soft / subfolder AD_Soft / subfolder2 git submodule sync-递归AD_Soft / subfolder / git子模块更新--recursive AD_Soft / subfolder

这为我解决了这个问题。