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


145

このガイドによると、TravisCIにHakyll静的サイトを自動的にデプロイさせようとしています。

これが私のリポジトリの設定方法です。hakyllファイルとmarkdownファイルを含むソースブランチがあります。それは_site私のmasterブランチにリンクされたサブモジュールとしてセットアップされたディレクトリにhtmlを構築します。

私は問題なくサイトを構築し、次に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

これは何が原因で、どうすればこれを回避できますか?

ここでリポジトリを表示できます。

回答:


430

gitからディレクトリを削除して再度追加すると、うまくいきました。

 git rm --cached directory
 git add directory

これは、メインのgitプロジェクト.gitに追加directoryしたいために意図的にディレクトリを削除した場合に機能します。私の特定のケースでは、私はgitで拡張機能を複製し、git add .あまり考えずに実行しました。Gitはサブモジュールを作成することを決めましたが、私はそれが好きではありませんでした。だから私は削除しdirectory/.git、に遭遇しましたGit: fatal: Pathspec is in submodule。サブモジュールのものを削除する方法を見つけることができませんでした。上記の2行で修正されました。


8
これにより、プロジェクトを既存のプロジェクトに誤ってプルダウンし、サブモジュールを作成していたという問題が解決しました。私はそこにある他のすべての提案を試してみました。ディレクトリを削除して再度追加すると、問題が解決しました。ありがとう。
RevNoah 2015

私は.gitを持っており、それを見てください!しかし、フォルダにあるいくつかのファイルをコミットしたい場合、「blahblahはgitが
認識して

これで問題が解決しました。私の場合、プロジェクトを別のマシンに複製しました。
AntonIva

私はGitHubと同期するVisual Studioプロジェクトで同じ問題を抱えていました。ほとんどの開発が行われているフォルダーは追跡されておらず、追加しようとすると同じエラーが発生していました。この解決策は私にとってもそれを修正しました!
JohnRDOrazio

10

思わgit addコンテキストが警告をトリガーする親レポ(「親」とサブモジュールを含む1)、です。

コンテキストを変更してみてください:

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もうわかりません。

参照してください2d81c48コミットすることにより(2017年1月9日)ステファンBellerを(stefanbeller
協力者:Jeff King(peffJunio C Hamano(gitster
(合併によりJunio C浜野- gitster-00880a1コミットし、2017年1月18日)を

pathspec:サブモジュール関連のpathspecエラーに対してより良いメッセージを与える

git add a/b」を「a」を実行するとサブモジュールが正しくエラー表示されますが、意味のあるエラーメッセージは表示されません。


私が手error: unknown option にgit-dirを= .git'`。また、Travis内から親リポジトリをコミットすることはできません
。Travisが

@jmite答えを修正しました:--git-dir--work-treegitコマンドではなく、git addコマンドのオプションです。実用的でないgit add場合は、少なくともその部分を試してくださいgit commit
VonC、2014年

これは私にとって何かを壊すようですが、ここで
CGTheLegend

4

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


1
まったく同じ問題があります。解決方法を教えてください。
マット

.gitフォルダーを削除しないようにスクリプトを変更して解決しました。したがって、スクリプトを確認し、ディレクトリに.gitフォルダーが実際にあるかどうかを確認することをお勧めします。
jmite 2015年

1
私はそうしますが、リモートリポジトリが存在しなくなったので、それを取り除きたいと思います。ソースコードをそのまま含めるほうが簡単です。
マット2015年

その場合は、リモートリポジトリの変更を検討するのが最善です。git remoteコマンドを見てください。
jmite 2015年

3

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

git submodule init
git submodule update

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

git submodule deinit _site

または:

git rm -f --cached _site

もう一度追加します。

git add _site

現在の未解決のサブモジュールを次の方法で確認してくださいgit submodule status

参照:git addで「アサーションが失敗しました」でgitエラーが発生するのはなぜですか?


1

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

> git submodule foreach --recursive deinit -f --all -- <relative path>
> git add --all -f
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.