Agregar submódulos de git automáticamente (.gitmodules)

4 minutos de lectura

Avatar de usuario de Synxis
sinxis

Tengo un repositorio con varios submódulos. Quiero agregar algunos otros, y la forma más rápida para mí es usar el .gitmodules (que en mi opinión debería permitir claramente cualquier tipo de gestión de submódulos).

Sin embargo, al editar este archivo y agregar submódulos, después de un git submodule init no se agrega nada (excepto los submódulos que ya estaban presentes antes de la modificación).

¿Hay alguna solución para agregar un submódulo sin pasar por git submodule add (es decir, simplemente editando el .gitmodules archivo y luego git submodule update --init) ?

Es decir, el siguiente flujo de trabajo debería agregar automáticamente el submódulo “comida/bar“:

Add the following to .gitmodules:
    [submodule "foo/bar"]
        path = foo/bar
        url = https://example.com/foo.git

Run the following command after saving:
    git submodule init
    git submodule update

Expected result:
    submodule 'foo/bar' automatically gets added
    it is also updated (the update command)

  • Cuando escribes git submodule add simplemente agrega la nueva entrada a los archivos .submodules, por lo que lo que describió es correcto y debería funcionar para usted. es por eso que después de la add tienes que correr init & update

    – Asistente de código

    16 de julio de 2014 a las 10:27


  • No usando git submodule add da como resultado que el módulo no se agregue para mí (lamentablemente) … Cuando lo piensa, git puede rastrear miles de modificaciones en muchos archivos, pero se pierde por completo cuando se trata de 3 líneas agregadas en .gitmodules

    – Synxis

    16 de julio de 2014 a las 10:27


  • He actualizado mi respuesta de acuerdo con su actualización, no puede hacerlo manualmente a menos que sepa cómo crear el directorio del módulo en .git carpeta.

    – Asistente de código

    16 de julio de 2014 a las 10:46

  • ejecutar este comando y ver los resultados GIT_TRACE=2 git submodule add git@github.com....

    – Asistente de código

    16 de julio de 2014 a las 10:47

  • Bastante loco, esto no es posible en una herramienta orientada a texto como esta ^^

    – xeruf

    24 de mayo a las 7:50

Avatar de usuario de Tomáš Hübelbauer
Tomáš Hübelbauer

Cuando agrega un submódulo de Git, Git crea .gitmodules archivo y para un submódulo llamado git-submodule agregará algo como esto:

[submodule "git-submodule"]
    path = git-submodule
    url = https://github.com/TomasHubelbauer/git-submodule

Lo mismo se agrega a .git/config después del contenido existente en ese archivo.

Se crea una carpeta para el submódulo con el nombre del submódulo en .git/modules. Esta carpeta es casi idéntica a la .git directorio del repositorio de submódulos real, pero no contiene el real objects (en cambio, los datos del submódulo se desprotegen en su directorio y sus metadatos están aquí).

Esto significa que, en teoría, es posible que pueda agregar un submódulo a mano sin usar git submodule add, pero tendría que volver a crear todos estos archivos de configuración. Pero todavía se puede imaginar clonar el repositorio de submódulos en un directorio separado y copiar su .git a este. Que puede que trabajar.

Sin embargo, agregar un submódulo también cambia el índice, .git/indexpor lo que también tendría que actualizar manualmente este hash y, en este punto, está reimplementando Git, pero manualmente.

Como resultado, no creo que sea práctico agregar un submódulo de Git a mano.

  • Gracias por tu respuesta. Sin embargo, la pregunta no era realmente sobre cómo agregar un submódulo a mano, sino sobre cómo hacer que el .gitmodule presentar el Maestro de la configuración del submódulo, es decir lo editas y escribes git submodule update para ajustar el repositorio. Aparentemente, esto no es posible 🙁

    – Synxis

    12 de diciembre de 2019 a las 14:44

  • Ah, ya veo, lo entendí mal. ¡Yo también desearía que ese fuera el caso!

    – Tomáš Hübelbauer

    12 de diciembre de 2019 a las 16:18

Avatar de usuario de CodeWizard
Asistente de código

Sí, como describió una vez que agrega el submódulo, se agrega a su .gitsubmodule expediente.

Pero a menos que sepa exactamente lo que hace, es mucho mejor usar el comando CLI, ya que puede haber algo con lo que no esté familiarizado como:

Una vez que haya terminado de editar su archivo de submódulo, deberá ejecutar:

git submodule init
git submodule update

Agregarlo manualmente no funcionará.

Ejecute el submódulo add y observe el .git cambios de carpeta. Verá una nueva carpeta llamada module con el nombre de su submódulo.

Es por eso que no debes hacerlo manualmente.

  • Bueno, mi pregunta no es agregar usando la línea de comando. lo que me gustaria es git submodule init para agregar automáticamente módulos no preparados que están presentes en gitmodules. Es decir, que los archivos de gitmodules dictan cómo gestiona git los submódulos (y no a la inversa). Es posible ?

    – Synxis

    16 de julio de 2014 a las 10:18

¿Ha sido útil esta solución?