web-dev-qa-db-ja.com

Git:致命的:Pathspecはサブモジュールにあります

このガイド に従って、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

116
jmite

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行で修正されました。

355
guaka

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」を実行します。

10
VonC

私の問題は、サブモジュールの.gitフォルダーを誤って削除していたことです。

4
jmite

初期化されていないサブモジュール(基本的に.gitディレクトリが欠落している)で操作しているように聞こえるので、まずそれらを初期化して更新する必要があります。

git submodule init
git submodule update

それ以外の場合、このサブモジュールが不要になったら、次の方法で削除します。

git submodule deinit _site

または:

git rm -f --cached _site

もう一度追加します:

git add _site

git submodule statusで現在の未処理のサブモジュールを確認します。

参照: なぜgit add。?で 'Assertion failed'でgitエラーが発生するのか

3
kenorb

プロジェクト内に複数のサブモジュールディレクトリがある場合でも、この問題を100%修正します。

> git submodule foreach --recursive deinit -f --all -- <relative path>
> git add --all -f
1
John Smit Conor