"Estás en una rama que aún no ha nacido" al agregar el submódulo git

116

Estoy intentando agregar algunos submódulos a mi .vim/bundlesdirectorio, y cuando intento agregar este repositorio en particular, Git me da un error extraño que nunca antes había visto:

$ git submodule add -f git://github.com/derekwyatt/vim-scala.git .vim/bundle/vim-scala
fatal: You are on a branch yet to be born
Unable to checkout submodule '.vim/bundle/vim-scala'

¿Alguna idea de qué puede causar esto?

Si clono el mismo repositorio en un directorio de prueba (no a través del comando del submódulo), funciona bien y crea los archivos esperados.

mate b
fuente

Respuestas:

210

Para corregir ese error, debe eliminar la carpeta con la misma ruta al submódulo dentro del .git/modules/directorio. Este error puede ocurrir cuando la URL es incorrecta para el submódulo por primera vez cuando se agregó el submódulo.

Lisachenko
fuente
2
Gracias, eso hizo el truco. Al principio, no era un poco obvio que, dado que estaba clonando en .vim/bundle/vim-scalala ruta para eliminar, fue.git/modules/.vim/bundle/vim-scala
matt b
2
Si está en Windows, tenga en cuenta que el directorio en .git / modules puede no aparecer a menos que usteddir /AH
paxos1977
13
Después de ver eliminar ese .git/modules/path/to/submoduledirectorio e intentar volver a agregar el submódulo, recibo el error La siguiente ruta es ignorada por uno de sus archivos .gitignore: ruta / a / submódulo .
Drew Noakes
1
@Drew Noakes elimina .vim / bundle / vim-scala creado después de la primera ejecución del submódulo git add
Piotr Król
En Windows, también puede usar las opciones del Explorador de Windows (en el mismo lugar donde elegiría ver las extensiones de archivo) para ver las carpetas ocultas en la GUI y eliminarlas.
user83358
13

Debe agregar un submódulo dentro de un repositorio existente, ese repositorio debe estar en un estado para agregar y confirmar el enlace del submódulo, y el repositorio del submódulo debe tener un compromiso para verificar.

Ahora, el repositorio del submódulo debe estar bien si puede crear un clon regular en otro lugar. Sin embargo, parece que se submodule addqueja si el repositorio está vacío, mientras que el clon no. Este tipo sugiere que esto se puede arreglar simplemente ejecutando el mismo submodule addcomando nuevamente.

Si el repositorio interno no está vacío, verifique el repositorio que desea que contenga el submódulo. Cambie al mismo directorio donde ejecutó git submodule addy ejecute git status, y git branchpara verificar que su repositorio contenedor tenga al menos una rama creada y no esté en un estado extraño.

Inútil
fuente
He verificado todas estas cosas. Cuando reviso el repositorio deseado en otro directorio, tiene muchos archivos y una masterrama. El repositorio al que estoy tratando de agregar este como un submódulo está en la masterrama, no tiene problemas obvios (el estado devuelve algunos archivos modificados, pero eso es todo), y lo más extraño de todo es que puedo agregar otros submódulos bien a este repositorio .
Matt b
También es extraño: después de la fataladvertencia de mi OP, git deja un directorio vacío en .vim/bundle/vim-scala. También noté que, aunque .gitmodulesno se ha modificado, agregó algunas líneas que se refieren a este repositorio de github.com .git/config, pero después de eliminarlas, sigo recibiendo el mismo fatalmensaje de error.
Matt b
7
+1 ¡Argh! This guy suggests this is fixable by just running the same submodule add command again.. He estado luchando contra este problema tratando de encontrar una respuesta sensata y esto finalmente lo solucionó. Esto fue para git 1.8.0 bajo MSYS mientras creaba un submódulo desde BitBucket, así que si se encuentra en la misma situación, intente esto primero.
Aaron Newton
Agregar dos veces también funcionó para mí. Pero no entiendo por qué. ¿Alguna explicación?
Elise
Añadiendo dos veces aquí también. Sin embargo, me encantaría entender por qué
Vinicius Dantas
12

Este error puede ocurrir si está agregando un submódulo que no tiene una masterrama. Si desea usar otra rama al agregar el submódulo ( developpor ejemplo), puede usar el siguiente comando:

git submodule add -b <branch> <repository>
k4nar
fuente
1
En mi caso, el repositorio se creó recientemente y, por lo tanto, no tenía archivos ni ramas (estaba vacío), así que git submodule add -b master <repo.git> <folder>ayudó
vladkras
Este fue mi problema, mi submódulo tenía solo 2 ramas, ninguna de ellas es una mastersolución que funcionó para mí.
Guerneen 4
0

Como aludió @ drew-noakes, esto puede deberse al intento de agregar un submódulo usando un nombre de directorio que aparece en su archivo .gitignore .

John McFarlane
fuente