173

根据本指南,我正在尝试让 TravisCI 自动部署我的 Hakyll 静态站点。

这是我的仓库的设置方式。我有我的源分支,其中包含我的 hakyll 和 markdown 文件。它将 html 构建到_site目录中,该目录设置为子模块,链接到我的master分支。

我毫无问题地构建了站点,然后cd进入 _site 目录。但是,当我尝试git add ./*使用新生成的 HTML 文件时,出现以下错误:

fatal: Pathspec './about.html' is in submodule '_site'

当我尝试git add --all时,我收到此错误:

git: pathspec.c:317: prefix_pathspec: Assertion `item->nowildcard_len <= item->len && item->prefix <= item->len' failed.

/home/travis/build.sh: line 245: 1566 Aborted git add --all

是什么导致了这种情况,我该如何避免这种情况?

您可以在此处查看存储库。

4

6 回答 6

518

从 git 中删除目录并再次添加它对我有用:

 git rm --cached directory
 git add directory

如果您.git因为想要添加directory到主 git 项目而故意删除该目录,则此方法有效。在我的具体情况下,我有 git 克隆了一个扩展程序并git add .没有想太多就跑了。Git 决定创建一个我不喜欢的子模块。所以我删除directory/.git并遇到了Git: fatal: Pathspec is in submodule. 我不知道如何删除子模块的东西。用上面的两行固定。

于 2015-07-07T14:09:47.937 回答
10

似乎git add上下文是触发警告的父仓库(“父”是指包含子模块的仓库)。

尝试通过以下方式更改其上下文:

cd _site
git --git-dir=.git --work-tree=. add . 
git --git-dir=.git --work-tree=. commit -m "new files"

不要忘记,如果这可行,您仍然必须返回父存储库,并且git add _site,因为子存储库会发生变化。

你必须同时推动两者。


2017 年 1 月更新(2 年后)

使用 Git 2.12,您将不会再看到这种情况prefix_pathspec: Assertion

请参阅Stefan Beller ( )的提交 2d81c48(2017 年 1 月 9 日) 。 帮助者:Jeff King ( )Junio C Hamano ( )(由Junio C Hamano 合并 -- --提交 00880a1中,2017 年 1 月 18 日)stefanbeller
peffgitster
gitster

pathspecpathspec:为子模块相关的错误提供更好的消息

git add a/b当“ ”是正确错误输出的子模块时运行“ ” a,但没有有意义的错误消息。

于 2014-06-29T03:58:59.987 回答
5

看来我的问题是我不小心删除.git了子模块的文件夹。

于 2014-07-03T17:07:53.583 回答
5

我想让一个子目录不再是一个 git 子模块。这对我有用:

$ mv subdir subdir2
$ git rm --cached subdir
$ mv subdir2 subdir
于 2021-02-13T06:45:43.880 回答
4

听起来您正在对未初始化的子模块进行操作(它们基本上缺少.git目录),因此您应该先初始化它们并更新:

git submodule init
git submodule update

否则,如果您不再需要此子模块,请通过以下方式将其删除:

git submodule deinit _site

或者:

git rm -f --cached _site

并再次添加:

git add _site

通过以下方式检查您当前未完成的子模块:git submodule status

另请参阅:为什么 git 在 git add 上出现“断言失败”错误?

于 2016-12-30T00:33:46.990 回答
1

100% 修复此问题,即使项目中有多个子模块目录:

> git submodule foreach --recursive deinit -f --all -- <relative path>
> git add --all -f
于 2019-02-24T16:10:42.353 回答