このガイド に従って、TravisCIにHakyll静的サイトを自動的に展開させようとしています。
リポジトリの設定方法は次のとおりです。ソースブランチには、hakyllファイルとmarkdownファイルが含まれています。それは_site
ディレクトリにhtmlを構築します。これはサブモジュールとしてセットアップされ、私のmaster
ブランチにリンクされます。
問題なくサイトを構築してから、cd
を_siteディレクトリに作成します。ただし、新しく生成されたHTMLファイルをgit add ./*
しようとすると、次のエラーが表示されます。
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
これは何が原因で、どのように回避できますか?
リポジトリを表示できます here 。
Gitからディレクトリを削除して再度追加すると、私にとってはうまくいきました:
git rm --cached directory
git add directory
これは、メインgitプロジェクトにdirectory
を追加するために.git
ディレクトリを意図的に削除した場合に機能します。私の特定のケースでは、拡張機能をgit cloneし、git add .
をあまり考えずに実行しました。 Gitはサブモジュールを作成することにしましたが、これは好ましくありません。そこでdirectory/.git
を削除し、Git: fatal: Pathspec is in submodule
に遭遇しました。サブモジュールのものを削除する方法を見つけることができませんでした。上記の2行で修正されました。
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
はもう表示されません。
commit 2d81c48 (2017年1月9日)by Stefan Beller(stefanbeller
) 。
ヘルプ: ジェフ・キング(peff
) 、および ジュニオC浜野(gitster
) 。
( に合併浜野純夫-gitster
- in commit 00880a1 、2017年1月18日)
pathspec
:サブモジュール関連のpathspec
エラーのメッセージを改善「
a
」が正しくエラーになったサブモジュールであるが、意味のあるエラーメッセージが表示されていない場合、「git add a/b
」を実行します。
私の問題は、サブモジュールの.git
フォルダーを誤って削除していたことです。
初期化されていないサブモジュール(基本的に.git
ディレクトリが欠落している)で操作しているように聞こえるので、まずそれらを初期化して更新する必要があります。
git submodule init
git submodule update
それ以外の場合、このサブモジュールが不要になったら、次の方法で削除します。
git submodule deinit _site
または:
git rm -f --cached _site
もう一度追加します:
git add _site
git submodule status
で現在の未処理のサブモジュールを確認します。
プロジェクト内に複数のサブモジュールディレクトリがある場合でも、この問題を100%修正します。
> git submodule foreach --recursive deinit -f --all -- <relative path>
> git add --all -f