Añadir submódulo de Git: problema "se encuentra un directorio git localmente"

194

De hecho, estoy tratando de aprender a usar git, incluidos los git submodulesubcomandos. Ya configuré un servidor en el que puedo alojar, empujar y extraer repositorios git usando SSH. Creé un repositorio principal de Git "Travail" en este servidor en el que me gustaría poner todos mis proyectos como submódulos.

En mi repositorio de Travail, ya agregué un proyecto mío como submódulo en tools/libft: Soy capaz de desarrollar este submódulo, empujarlo y tirar de él.

Pero cuando intento agregar otro submódulo (llamado fdf, de fdf.git en mi servidor), aparece el siguiente problema:

git submodule add ssh://XXX.XXX.XXX.XXX:XXXXX/opt/git/fdf.git projets/fdf

Un directorio git para 'projets / fdf' se encuentra localmente con remoto (s): origen ssh: //[email protected]: XXXXX / opt / git / fdf.git Si desea reutilizar este git local En lugar de clonar nuevamente desde ssh: //XXX.XXX.XXX.XXX: XXXXX / opt / git / fdf.git, use la opción '--force'. Si el directorio git local no es el repositorio correcto o no está seguro de lo que esto significa, elija otro nombre con la opción '--name'.

En realidad no hay subdirectorio en projets/

Leí en otro hilo que debería usar git submodule synco editar el archivo .gitmodules en el que la URL del repositorio de origen de mi submódulo podría haber cambiado.

Pero mi archivo .gitmodules solo contiene la información sobre mi primer submódulo (herramientas / libft), no sobre proyectos / fdf:

[submodule "tools/libft"]
    path = tools/libft
    url = ssh://[email protected]:XXXXX/opt/git/libft.git

Como estudiante francés, podría haber perdido algo en la documentación en inglés que tengo, pero busqué y realmente no entiendo por qué me sale este problema.

Me alegraría si obtuviera una solución, pero solo una explicación también sería útil.

vmonteco
fuente
Una pequeña corrección: es 'repositorio', no 'depositario'. Realmente no es una respuesta, pero si los proyectos son independientes entre sí, sería mejor que cada proyecto tenga su propio repositorio en lugar de submódulos.
jcm
Gracias, lo corregí. Lo sé, pero me gustaría reunir todo mi trabajo en el mismo repositorio pero como proyectos separados. Es una opción mantener actualizado todo mi trabajo cuando voy de casa a mi escuela y viceversa (y tengo curiosidad por aprender a usar estas herramientas))
vmonteco
Bueno, la curiosidad siempre es una buena razón. :) Eso es extraño. ¿Estás seguro de que no has agregado el submódulo antes?
jcm
No en Travail /, y no tengo ningún problema para clonar fdf.git en ~ /. En Travail / No encuentro rastros de fdf. solo libft: /
vmonteco
55
Oh, espera, busqué /Travail/.git/modules/projets/y encontré un fdfdirectorio. Esto parece no estar en el árbol de trabajo sino en los commits más antiguos. ¿Podría generar el problema?
vmonteco

Respuestas:

445

Llegué a esta publicación SO tratando de agregar un submódulo con la misma ruta que un submódulo que eliminé recientemente.

Esto es lo que finalmente funcionó para mí ( este artículo me ayudó mucho ):

Si aún no ha ejecutado git rm --cached path_to_submodule(sin barra inclinada) rm -rf path_to_submodule, ¡hágalo!

Luego:

  1. Elimine las líneas relevantes del .gitmodulesarchivo. Por ejemplo, eliminar estos:

    [submodule "path_to_submodule"] path = path_to_submodule url = https://github.com/path_to_submodule

  2. Elimine la sección relevante de .git / config. Por ejemplo, eliminar estos:

    [submodule "path_to_submodule"] url = https://github.com/path_to_submodule

  3. rm -rf .git/modules/path_to_submodule

Entonces, finalmente puedes:

git submodule add https://github.com/path_to_submodule

jbmilgrom
fuente
47
Esto fue realmente útil, ya que no pude encontrar nada más que funcionara. La diferencia clave de otras sugerencias fue su paso # 3. ¡Gracias!
AndroidDev
8
Los pasos 2 y 3 fueron necesarios para mí.
U007D
8
El paso 3 era necesario para mí pero, ¿por qué existe el submódulo allí también?
Crt
1
Para mí, omití los pasos 1 y 2 (que ya tenían la configuración correcta) y el paso 3 lo arregló por mí. (Ya había hecho el primer paso git rmy rm -rfpasos).
Rock Lee
2
Incluso el paso 3 no funcionó para mí. Solo tenía un submódulo, así que eliminé todo .git/modulesy eso terminó funcionando.
ach
47

probé la solución de jbmilgrom, específicamente lo intenté git rm --cachey tampoco funcionó para mí ya que el directorio / submódulo no estaba allí. Lo que funcionó para mí fue:

  1. rm -rf .git/modules/blah
  2. git submodule add git://path.to.new

Hice esto después de intentar --forcedentro de los git submodulecomandos y rmtodos los demás directorios, empujones para dominar, etc. El directorio no existía y no había razón para el caché. Resulta .git/modulesque ahí es donde estaba este error.

pjammer
fuente
15

Es posible que haya eliminado su 'projets/fdf'disco, pero su repositorio de Git todavía lo tiene. Use git rm -rf projets/fdfpara eliminarlo de Git, luego confirme los cambios. Después de eso, podrá agregar esta carpeta como un submódulo.

bredikhin
fuente
Funcionó :) Gracias. Creo que realmente cometí este error.
vmonteco
21
Me dicen que el directorio no existe cuando hago esto. Parece que ambos existen y no: /
Nathan Hornby
41
@ tom-mcfarlin Al final, eliminé manualmente líneas de .gitmodule y una carpeta de .git / modules, luego me permitió agregar un nuevo submódulo. Tal vez hay una mejor manera de hacer esto, pero se me estaba acabando el tiempo. Si vas por este camino, te recomiendo que hagas una buena copia de seguridad y, por favor, no me culpes, si te sale mal. Buena suerte.
sparklos
55
Gracias, encontré en otra publicación para eliminar la carpeta de .git / modules y eso funcionó para mí. Tiene sentido ya que eso es lo que el error dijo que era el conflicto ... Simplemente no estaba al tanto de esa carpeta
Tom McFarlin
10
@NathanHornby @Sparklos @TomMcFarlin: en las versiones más recientes de git, encontrará que git-submodule agrega un directorio en la carpeta .git. Por ejemplo, si está en el directorio /tmp/repo, ejecute git submodule add ../otherrepo.git, verá que esa /tmp/repo/.git/modules/otherrepocarpeta existe. Ese fue el problema para mí. Eliminé manualmente esa carpeta de .git, y todo funcionó.
Alexander Bird
13

Si ya eliminó el directorio de submódulos, como lo hice, siga el resto de las instrucciones de jbmilgrom. La clave es rm -rf .git/modules/path_to_submoduleseguir adelante y hacer una copia de seguridad de todo el directorio principal de repositorios primero .

Si solo tuvo un submódulo simplemente elimine .gitmodules

Dmitri R117
fuente
2

Estos dos comandos me funcionan.

rm path/to/submodule -rf
rm .git/modules/path/to/module -rf
W.Perrin
fuente
Esta. Parece que hay dos formas de crear submódulos. En uno de ellos, la subcarpeta solo tendrá un único archivo .git que simplemente apunte a un directorio en el superproyecto, comenzando por .git/modules/. En hay una carpeta que almacena el repositorio para el submódulo. Eliminar ese repositorio solucionó el problema para mí, mientras que la respuesta aceptada no.
William Randokun