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 .
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.
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éepathspec
erreurRunning "
git add a/b
, "quand"a
" est un sous-module correctement erronées hors, mais sans un message d'erreur significatif.
il semble que mon problème est que je supprimais accidentellement le dossier .git
du sous-module.
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 .?