Git:致命的:Pathspec在submodule中
我试图让TravisCI自动部署我的Hakyll静态网站,根据这个指南 。
这是如何设置我的回购。 我有我的源分支,其中包含我的hakyll和降价文件。 它将html构build到_site
目录中,该目录被设置为一个子模块,链接到我的master
分支。
我build立网站没有问题,然后进入_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
这是什么原因造成的,怎样才能避免这种情况?
你可以在这里查看版本库。
从git中删除目录并再次添加它为我工作:
git rm --cached directory git add directory
如果因为想要将directory
添加到主git项目而有意删除了.git
目录,这将起作用。 在我的具体情况下,我有git克隆了一个扩展名,并运行git add .
没有想太多。 Git决定创build一个我不喜欢的子模块。 所以我删除了directory/.git
并跑到Git: fatal: Pathspec is in submodule
。 我无法find如何删除子模块的东西。 用上面的两行固定。
看来git add
context是父回购(“parent”是指包含子模块的回购),这会触发警告。
试着改变它的上下文:
cd _site git --git-dir=.git --work-tree=. add . git --git-dir=.git --work-tree=. commit -m "new files"
不要忘记,如果这样做,你仍然必须回到父回购,并git add _site
,因为subrepo会有变化。
而你将不得不推动两个。
2017年1月更新(2年以后)
使用Git 2.12,你不会再看到prefix_pathspec: Assertion
。
请参阅由Stefan Beller( stefanbeller
) 提交的2d81c48 (2017年1月9日) 。
帮助: 杰夫·金( peff
)和Junio C gitster
( gitster
) 。
(由Junio C gitster
合并- gitster
– 承诺 2017年1月18日00880a1 )
pathspec
:为子模块相关pathspec
错误提供更好的消息当“
a
”是正确出错的子模块时运行“git add a/b
”,但没有有意义的错误信息。
看来我的问题是,我不小心删除了子模块的.git
文件夹。
这听起来像你正在操作非初始化的子模块(他们基本上缺less.git
目录),因此你应该初始化它们并更新:
git submodule init git submodule update
否则,如果您不再需要此子模块,请通过以下方式将其删除:
git submodule deinit _site
要么:
git rm -f --cached _site
并再次添加它:
git add _site
通过以下命令检查当前未完成的子模块: git submodule status
。
另请参阅: 为什么Git错误与Git添加“断言失败”?