Git: fatal: Pathspec est en sous-module

J'essaie d'obtenir que TravisCI déploie automatiquement mon site statique Hakyll, selon ce guide .

Voici comment mon repo est organisé. J'ai ma branche source, qui contient mes fichiers hakyll et markdown. Il construit le html dans le répertoire _site , qui est configuré comme un sous-module, lié à ma branche master .

je construis le site sans problème, puis cd dans le répertoire _site. Cependant, lorsque j'essaie de git add ./* les fichiers HTML nouvellement générés, j'obtiens l'erreur suivante:

fatal: Pathspec './about.html' is in submodule '_site'

quand j'essaie git add --all , j'obtiens cette erreur:

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

Qu'est-ce qui cause cela, et comment puis-je éviter cela?

vous pouvez voir le dépôt ici .

93
demandé sur jmite 2014-06-29 06:15:44

4 réponses

supprimer le répertoire de git et l'ajouter à nouveau a fonctionné pour moi:

 git rm --cached directory
 git add directory

cela fonctionne si vous avez volontairement supprimé le répertoire .git parce que vous vouliez ajouter directory à votre projet git principal. Dans mon cas précis, git a cloné une extension et a lancé git add . sans trop réfléchir. Git a décidé de créer un sous-module, ce que je n'ai pas aimé. Donc j'ai enlevé directory/.git et j'ai couru dans Git: fatal: Pathspec is in submodule . Je ne pouvais pas trouver comment retirez la substance submodule. Fixe avec les deux lignes ci-dessus.

286
répondu guaka 2015-07-08 10:33:18

il semble que le contexte git add soit le parent repo ("parent" signifie Celui qui inclut le sous-module), qui déclenche l'avertissement.

essayer de changer son contexte avec:

cd _site
git --git-dir=.git --work-tree=. add . 
git --git-dir=.git --work-tree=. commit -m "new files"

n'oubliez pas que, si cela fonctionne, vous devrez quand même retourner au rapport parent, et git add _site , puisque le sous-rapport aura des changements.

et il faudrait pousser les deux.


mise à Jour janvier 2017 (+de 2 ans plus tard)

avec Git 2.12, vous ne verrez plus ce prefix_pathspec: Assertion .

Voir commettre 2d81c48 (09 Jan 2017) par Stefan Beller ( stefanbeller ) .

Aidé par: Jeff King ( peff ) , et Junio C. Hamano ( gitster ) .

(Regroupées par Junio C Hamano -- gitster -- dans commettre 00880a1 , 18 janvier 2017)

pathspec : donner un meilleur message pour sous-module liée pathspec erreur

Running " git add a/b , "quand" a " est un sous-module correctement erronées hors, mais sans un message d'erreur significatif.

10
répondu VonC 2017-01-22 12:32:37

il semble que mon problème est que je supprimais accidentellement le dossier .git du sous-module.

4
répondu jmite 2015-09-18 19:35:23

il semble que vous travaillez sur des sous-modules non initialisés (ils sont essentiellement manquants .git répertoires), donc vous devriez les initialiser d'abord et mettre à jour:

git submodule init
git submodule update

Sinon, si vous n'avez plus besoin de ce sous-module, retirez-le par:

git submodule deinit _site

ou:

git rm -f --cached _site

et l'ajouter de nouveau:

git add _site

Vérifiez vos sous-modules actuels par: git submodule status .

Voir aussi: Pourquoi est-git erroring avec "Assertion failed" sur git add .?

2
répondu kenorb 2017-05-23 11:47:29