the submodulos submodules submodule inside index explained already git git-submodules

submodulos - gitlab submodules



¿Cómo puedo "confirmar" cambios en un submódulo de git? (5)

Antes de que pueda confirmar y enviar, debe iniciar un árbol de repositorio de trabajo para un submódulo. Estoy usando tortuga y hago las siguientes cosas:

Primero verifique si existe un archivo .git (no un directorio)

  • Si existe tal archivo, contiene la ruta al directorio git de supermodulo.
  • borrar este archivo
  • haz git init
  • hacer git agregar ruta remota la utilizada para submódulo
  • siga las instrucciones a continuación

Si había un archivo .git, había un directorio .git que rastreaba el árbol local. Aún necesita una rama (puede crear una) o cambiar a maestro (que a veces no funciona). Lo mejor que puedes hacer es - git fetch - git pull. No omita la búsqueda.

Ahora sus compromisos y tiradas se sincronizarán con su origen / maestro

Esta pregunta ya tiene una respuesta aquí:

En mi ingenuidad, he configurado un submódulo de git y lo he tratado como un Subversion externo, es decir, ahora está lleno de cambios que me he dado cuenta de que no se han comprometido ni han sido empujados a ningún lado.

¿Hay alguna manera fácil de confirmar / enviar los cambios de submódulo al repositorio ascendente? ¿Y cuál es la técnica recomendada en Git para realizar el desarrollo simultáneo en repositorios separados (pero vinculados) de esta manera?


Puede tratar un submódulo exactamente como un repositorio ordinario. Para propagar sus cambios en sentido ascendente, simplemente confirme y presione como lo haría normalmente dentro de ese directorio.


Tenga en cuenta que si ha cometido un montón de cambios en varios submódulos, puede (o será pronto capaz de) empujar todo de una vez (es decir, un empujón de la cesión temporal de los padres), con:

git push --recurse-submodules=on-demand

git1.7.11 ( [ANUNCIO] Git 1.7.11.rc1 ) menciona:

" git push --recurse-submodules " aprendieron a mirar opcionalmente en las historias de submódulos con destino a la SuperProject y empuje hacia fuera.

Probablemente se haga después de este parche y la --on-demand :

--recurse-submodules=<check|on-demand|no>::

Asegúrese de que todas las confirmaciones de submódulos utilizadas por las revisiones que se enviarán estén disponibles en una rama de seguimiento remoto.

  • Si check se utiliza, se comprobará que todos los envíos submódulo que cambiaron en las revisiones que ser empujados están disponibles en un mando a distancia.
    De lo contrario, la inserción se abortará y saldrá con un estado distinto de cero.
  • Si se utiliza a on-demand , se empujarán todos los submódulos que cambiaron en las revisiones que se enviarán.
    Si en la demanda no era capaz de empujar todas las revisiones necesarias también será abortado y de salida con estado distinto de cero.

Esta opción solo funciona para un nivel de anidación. Los cambios en el submódulo dentro de otro submódulo no serán empujados.


El submódulo es su propio repositorio / área de trabajo, con su propio directorio .git .

Entonces, primero comprometa / presiona los cambios de tu submódulo:

$ cd path/to/submodule $ git add <stuff> $ git commit -m "comment" $ git push

Luego diga a su proyecto principal que haga un seguimiento de la versión actualizada:

$ cd /main/project $ git add path/to/submodule $ git commit -m "updated my submodule" $ git push


$ git submodule status --recursive

También es un salvavidas en esta situación. Se puede utilizar y gitk --all para mantener un registro de sus de SHA1 y verificar sus submódulos están apuntando a lo que se piensa que son.