git github version-control git-submodules hakyll

Git: fatal: Pathspec está en el submódulo



github version-control (4)

Estoy intentando que TravisCI despliegue automáticamente mi sitio estático Hakyll, de acuerdo con esta guía .

Así es como está configurado mi repositorio. Tengo mi rama fuente, que contiene mis archivos hakyll y markdown. Construye el html en el directorio _site , que está configurado como un submódulo, vinculado a mi rama master .

Construyo el sitio sin problemas, luego copio en el directorio _site. Sin embargo, cuando intento git add ./* los archivos HTML recién generados, git add ./* el siguiente error:

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

Cuando pruebo git add --all , obtengo este error:

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á causando esto y cómo puedo evitarlo?

Puede ver el repositorio here .


Eliminar el directorio de git y agregarlo nuevamente funcionó para mí:

git rm --cached directory git add directory

Esto funciona si eliminaste intencionadamente el directorio .git porque querías agregar un directory a tu proyecto principal de git. En mi caso específico, tuve git clonado una extensión y ejecuté git add . sin pensar demasiado Git decidió crear un submódulo, que no me gustó. Así que eliminé el directory/.git y me encontré con Git: fatal: Pathspec is in submodule . No pude encontrar la manera de eliminar el submódulo. Corregido con las dos líneas de arriba.


Parece que el contexto de git add es el repositorio padre ("padre" significa el que incluye el submódulo), que desencadena la advertencia.

Intenta cambiar su contexto con:

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

No olvide que, si esto funciona, igual tendría que volver al repositorio padre y git add _site , ya que el subrepo tendría cambios.

Y tendrías que empujar a los dos.

Actualización enero de 2017 (2+ años más tarde)

Con Git 2.12, no verá ese prefix_pathspec: Assertion más.

Ver commit 2d81c48 (09 Jan 2017) por Stefan Beller ( stefanbeller ) .
Ayudado por: Jeff King ( peff ) , y Junio ​​C Hamano ( gitster ) .
(Fusionado por Junio ​​C Hamano - gitster - in commit 00880a1 , 18 de enero de 2017)

pathspec : da mejor mensaje para error de pathspec relacionado con submódulo

Ejecutando " git add a/b " cuando " a " es un submódulo correctamente errado, pero sin un mensaje de error significativo.


Parece que está operando en submódulos no inicializados (básicamente faltan directorios .git ), por lo tanto, debe inicializarlos primero y actualizar:

git submodule init git submodule update

De lo contrario, si ya no necesita este submódulo, quítelo de la siguiente manera:

git submodule deinit _site

o:

git rm -f --cached _site

y agregarlo de nuevo:

git add _site

Compruebe sus submódulos pendientes actuales por: git submodule status .

Ver también: ¿Por qué git erroring con ''Assertion failed'' en git add.?


Parece que mi problema es que .git accidentalmente la carpeta .git del submódulo.