Git:致命:Pathspec在submodule中

jmi*_*ite 125 git version-control github git-submodules hakyll

根据本指南,我试图让TravisCI自动部署我的Hakyll静态站点.

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

我没有问题地构建网站,然后cd进入_site目录.但是,当我尝试git add ./*新生成的HTML文件时,我收到以下错误:

fatal: Pathspec './about.html' is in submodule '_site'
Run Code Online (Sandbox Code Playgroud)

当我尝试时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
Run Code Online (Sandbox Code Playgroud)

造成这种情况的原因是什么,我该如何避免这种情况?

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

fif*_*nce 377

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

 git rm --cached directory
 git add directory
Run Code Online (Sandbox Code Playgroud)

如果你有意删除了.git目录,因为你想要添加directory到你的主git项目,这是有效的.在我的具体案例中,我让git克隆了一个扩展并且git add .没有想太多就跑了.Git决定创建一个我不喜欢的子模块.所以我删除directory/.git并遇到了Git: fatal: Pathspec is in submodule.我无法找到如何删除子模块的东西.修复了上面的两行.

  • 这解决了我在不小心将项目拆分到现有项目中的问题,创建了一个子模块.我曾尝试过其他任何建议.删除目录并再次添加解决了我的问题.谢谢. (8认同)

M. *_*ard 18

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

$ mv subdir subdir2
$ git rm --cached subdir
$ mv subdir2 subdir
Run Code Online (Sandbox Code Playgroud)


Von*_*onC 10

看起来git add上下文是父repo("parent"表示包含子模块的那个),它会触发警告.

尝试并更改其上下文:

cd _site
git --git-dir=.git --work-tree=. add . 
git --git-dir=.git --work-tree=. commit -m "new files"
Run Code Online (Sandbox Code Playgroud)

不要忘记,如果这样做,你仍然需要回到父回购,并且git add _site,因为subrepo会有变化.

你必须推动两者.


2017年1月更新(2年后)

使用Git 2.12,你将不会再看到它prefix_pathspec: Assertion了.

Stefan Beller()提交2d81c48(2017年1月9日). 帮助:Jeff King()Junio C Hamano().(通过合并JUNIOÇ滨野- -提交00880a1,2017年1月18日)stefanbeller
peffgitster
gitster

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

git add a/b当" a"是正确错误的子模块时运行" " ,但没有有意义的错误消息.


ken*_*orb 6

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

git submodule init
git submodule update
Run Code Online (Sandbox Code Playgroud)

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

git submodule deinit _site
Run Code Online (Sandbox Code Playgroud)

或者:

git rm -f --cached _site
Run Code Online (Sandbox Code Playgroud)

并再次添加:

git add _site
Run Code Online (Sandbox Code Playgroud)

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

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


jmi*_*ite 5

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


归档时间:

查看次数:

62689 次

最近记录:

6 年,7 月 前