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)
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/index
por 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 escribesgit 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
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
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 laadd
tienes que correrinit & 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