突然之间我得到了这个git错误:“”git status --porcelain failed“”当我做git状态时......那是什么意思?
答案 0 :(得分:33)
就我而言,我已将子模块移动到另一个目录,我收到了错误消息。
.gitsubmodule
以匹配子模块的当前路径。<currentPathOfSubmodule>/.git
,gitdir
必须与.git/modules/<pathOfSubmodule>
匹配。它有很多../../
,您可以使用ls
进行检查。得到了这个错误: - )
致命:无法转到../<someWhere>
:没有这样的档案或目录
致命:git status --porcelain
子模块失败
修改.git/modules/<pathOfSubmodule>/config
,worktree
必须与子模块的当前路径匹配。
完成。
答案 1 :(得分:13)
在一些类似的StackOverflow问题中可以找到此错误消息:here,here。谷歌搜索引出a mailing list message with this error。没有人给出解释为什么会发生,所以我想我会添加我发现的东西。
来自man git
页面的术语概述:
GIT COMMANDS
我们将git分为高级别(&#34;瓷器&#34;)命令和低级别(&#34; plumbing&#34;)命令。
从上面的帖子中可以看出,当git status
运行时,它会调用git status --porcelain
。 man git-status
有助于告知我们--porcelain
标志的用途:
- 瓷
以易于解析的格式为脚本提供输出。这类似于短输出,但仍将保留 在git版本中稳定,无论用户配置如何。有关详细信息,请参阅下文。
因此,您遇到的问题与git status
调用有关,默认情况下尝试将其输出格式化为易于解析的内容。
从上面的帖子,特别是答案here和mailing 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”除了根目录之外的所有目录,但是如果你删除了它再次初始化你的仓库