为什么我会得到"git status --porcelain failed"?

Doz*_*Doz 18 git version-control github

突然之间我得到了这个git错误:""git status --porcelain failed""当我做一个git状态时......那是什么意思?

cak*_*yus 38

在我的情况下,我已将子模块移动到另一个目录,我收到了该错误消息.

  1. 移动子模块后,我编辑.gitsubmodule以匹配子模块的当前路径.
  2. 编辑<currentPathOfSubmodule>/.git,gitdir必须匹配.git/modules/<pathOfSubmodule>.它有很多../../,你可以ls用来检查.
  3. 得到那个错误:-)

    致命:无法chdir ../<someWhere>:没有这样的文件或目录
    致命:git status --porcelain子模块失败

  4. 编辑时.git/modules/<pathOfSubmodule>/config,worktree必须匹配子模块的当前路径.

  5. 完成.

  • 第4步是神奇的.谢谢! (5认同)

sim*_*ont 13

在一些类似的StackOverflow问题中可以找到此错误消息:此处,此处.谷歌搜索带来此错误的邮件列表消息.没有人给出解释为什么会发生,所以我想我会添加我发现的东西.

一些术语概述,从man git页面:

GIT命令

我们将git分为高级("瓷器")命令和低级("管道")命令.

从上面的帖子中可以看出,在git status运行时,它会调用git status --porcelain.man git-status帮助告知我们--porcelain标志的用途:

- 瓷

以易于解析的格式为脚本提供输出.这与短输出类似,但在git版本中保持稳定,无论用户配置如何.请参阅下文了解详情.

所以你遇到的问题与git status调用有关,默认情况下尝试将其输出格式化为易于解析的内容.

从上面的帖子,特别是这里的答案和邮件列表的竞争,我建议,无论出于何种原因,你的git存储库已经损坏.如果您正在使用子模块,那么其中一个可能已损坏 - 这是相关的,因为

status在每个填充的子模块中运行"git status --porcelain"以查看它是否包含更改(链接)

除非明确告知不要这样做.

至于为什么你似乎有一个损坏的git存储库?我不知道.StackOverflow上的其他几个人已经提到覆盖,移动,替换或者通常.git在其存储库中摆弄目录.幸运的是,你有一个备份,对吧?;)