【问题标题】:Why am i getting "git status --porcelain failed"? [duplicate]为什么我得到“git status --porcelain failed”? [复制]
【发布时间】:2011-07-31 09:59:17
【问题描述】:

突然间我收到这个 git 错误:""git status --porcelain failed"" 当我执行 git status 时...。这是怎么回事?

【问题讨论】:

  • 如果你移动了文件并且在 repo 中有多个 .git 文件可能会导致这个问题,请确保存档的根目录中只有一个 .git 文件

标签: git version-control github


【解决方案1】:

在我的例子中,我已经将一个子模块移动到另一个目录并且我收到了错误消息。

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

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

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

  5. 完成。

【讨论】:

  • 我自己永远也想不通。
  • 第 4 步很神奇。谢谢!
  • 我能够调整这些步骤以递归地修复具有自己子模块的子模块中的路径。
  • 有没有可以自动完成的命令?
【解决方案2】:

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

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

GIT 命令

我们将 git 分为高级(“瓷器”)命令和低级(“管道”)命令。

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

--瓷器

以易于解析的格式为脚本提供输出。这类似于短输出,但仍将保留 跨 git 版本稳定,无论用户配置如何。详情见下文。

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

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

status 在每个填充的内部运行“git status --porcelain” 子模块,看看它是否包含更改 (link)

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

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

【讨论】:

  • 谢谢,这是不久前,我刚刚从备份中恢复,而不是按照你的方式做,但如果我不幸再次遇到这个问题,也许下次......
  • 我的子模块有一个绝对路径作为gitdir 的值;执行git mv 导致此路径无效。看起来 git 不够聪明,无法在移动文件时更新子模块路径,即使使用它自己的生态系统命令也是如此。
  • 我说的是fatal: cannot chdir to '../../../../Modules/my_include': No such file or directory,所以我创建了Modules/my_include,这让那个错误消失了
【解决方案3】:

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

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

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

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

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

【讨论】:

  • 这实际上对我有用 :) 谢谢。
猜你喜欢
  • 2011-07-24
  • 2021-04-06
  • 1970-01-01
  • 2015-07-16
  • 1970-01-01
  • 1970-01-01
  • 2019-11-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多