Solución:
el submódulo es un enlace;
subárbol es copia
-
submódulo se adapta mejor al desarrollo basado en componentes, donde su proyecto principal depende de una versión fija de otro componente (repositorio).
Mantienes solo referencias en tu repositorio principal (gitlinks, entradas especiales en el índice)
¿Qué pasa si quiero que los enlaces apunten siempre al HEAD del repositorio externo?
Puede crear un submódulo para seguir el HEAD de una rama de un repositorio remoto de submódulo, con:
o git submodule add -b <branch> <repository> [<path>]
. (especificar una rama a seguir)
o git submodule update --remote
que actualizará el contenido del submódulo al último HEAD de <repository>/<branch>
, por defecto origin/master
. Su proyecto principal seguirá rastreando los hash del HEAD del submódulo incluso si --remote
aunque se utiliza.
-
subárbol es más como un desarrollo basado en el sistema, donde todo su repositorio contiene todo a la vez, y puede modificar cualquier parte.
Vea un ejemplo en esta respuesta.
La diferencia conceptual es:
Con submódulos de git por lo general, desea separar un repositorio grande en otros más pequeños. La forma de hacer referencia a un submódulo es estilo maven – está haciendo referencia a una única confirmación del otro repositorio (submódulo). Si necesita un cambio dentro del submódulo, debe realizar una confirmación / inserción dentro del submódulo, luego hacer referencia a la nueva confirmación en el repositorio principal y luego confirmar / enviar la referencia modificada del repositorio principal. De esa manera, debe tener acceso a ambos repositorios para la compilación completa.
Con subárbol git integres otro repositorio en el tuyo, incluido su historial. Entonces, después de integrarlo, el tamaño de su repositorio probablemente sea mayor (por lo que esta no es una estrategia para mantener los repositorios más pequeños). Después de la integración, no hay conexión con el otro repositorio y no necesita acceder a él a menos que desee obtener una actualización. Entonces, esta estrategia es más para la reutilización del código y el historial; yo personalmente no la uso.