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 depathspec
relacionado con submóduloEjecutando "
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.