Git: fatal: Pathspec est dans le sous-module

J’essaie de faire en sorte que TravisCI déploie automatiquement mon site statique Hakyll, selon ce guide .

Voici comment mon repo est configuré. J’ai ma twig 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 twig principale.

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

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

Lorsque j’essaye d’ git add --all , j’obtiens cette erreur:

 git: pathspec.c:317: prefix_pathspec: Assertion `item->nowildcard_len len && item->prefix len' failed. /home/travis/build.sh: line 245: 1566 Aborted git add --all 

Qu’est-ce qui cause ceci, et comment puis-je l’éviter?

Vous pouvez voir le référentiel ici .

Supprimer le répertoire de git et l’append à nouveau a fonctionné pour moi:

  git rm --cached directory git add directory 

Cela fonctionne si vous avez délibérément supprimé le répertoire .git car vous vouliez append un directory à votre projet principal git. Dans mon cas spécifique, j’avais cloné une extension et lancé git add . sans trop réfléchir. Git a décidé de créer un sous-module que je n’aimais pas. J’ai donc supprimé le directory/.git et je directory/.git tombé sur Git: fatal: Pathspec is in submodule . Je ne pouvais pas savoir comment enlever les trucs du sous-module. Fixé avec les deux lignes ci-dessus.

Il semble que le contexte d’ git add soit le repo parent (“parent” signifie celui incluant le sous-module), qui déclenche l’avertissement.

Essayez de changer de 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 toujours retourner au git add _site parent, et git add _site , puisque le sous-ordre aura des modifications.

Et vous devriez pousser les deux.


Mise à jour Janvier 2017 (2 ans et plus après)

Avec Git 2.12, vous ne verrez plus prefix_pathspec: Assertion .

Voir commit 2d81c48 (09 janv. 2017) par Stefan Beller ( stefanbeller ) .
Aider: Jeff King ( peff ) et Junio ​​C Hamano ( gitster ) .
(Fusionné par Junio ​​C Hamano – gitster – dans commit 00880a1 , 18 janvier 2017)

pathspec : donne un meilleur message pour l’erreur pathspec liée au sous-module

L’exécution de ” git add a/b ” lorsque ” a ” est un sous-module correctement erroné, mais sans message d’erreur significatif.

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

Il semble que vous soyez sur des sous-modules non initialisés (ils manquent .git répertoires .git ), vous devez donc les initialiser en premier et les mettre à jour:

 git submodule init git submodule update 

Sinon, si vous n’avez plus besoin de ce sous-module, supprimez-le en:

 git submodule deinit _site 

ou:

 git rm -f --cached _site 

et ajoutez-le encore:

 git add _site 

Vérifiez vos sous-modules en suspens actuels par: l’ git submodule status .

Voir aussi: Pourquoi git error avec ‘Assertion failed’ sur git add.?