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

时间:2011-07-31 09:59:17

标签: git version-control github

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

3 个答案:

答案 0 :(得分:33)

就我而言,我已将子模块移动到另一个目录,我收到了错误消息。

  1. 移动子模块后,我编辑.gitsubmodule以匹配子模块的当前路径。
  2. 修改<currentPathOfSubmodule>/.gitgitdir必须与.git/modules/<pathOfSubmodule>匹配。它有很多../../,您可以使用ls进行检查。
  3. 得到了这个错误: - )

    致命:无法转到../<someWhere>:没有这样的档案或目录 致命:git status --porcelain子模块失败

  4. 修改.git/modules/<pathOfSubmodule>/configworktree必须与子模块的当前路径匹配。

  5. 完成。

答案 1 :(得分:13)

在一些类似的StackOverflow问题中可以找到此错误消息:herehere。谷歌搜索引出a mailing list message with this error。没有人给出解释为什么会发生,所以我想我会添加我发现的东西。

来自man git页面的术语概述:

  

GIT COMMANDS

     
    

我们将git分为高级别(&#34;瓷器&#34;)命令和低级别(&#34; plumbing&#34;)命令。

  

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

  

- 瓷

     
    

以易于解析的格式为脚本提供输出。这类似于短输出,但仍将保留                在git版本中稳定,无论用户配置如何。有关详细信息,请参阅下文。

  

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

从上面的帖子,特别是答案heremailing list contentets,我建议,无论出于何种原因,您的git存储库已经损坏。如果您正在使用子模块,那么其中一个可能已损坏 - 这是相关的,因为

  

状态运行&#34; git status --porcelain&#34;在每个人口中   子模块,以查看它是否包含更改(link

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

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

答案 2 :(得分:0)

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

中创建一个隐藏目录

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

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

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

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