Diferencias entre el submódulo y el subárbol de git


¿Cuáles son las diferencias conceptuales entre el uso del submódulo de git y el subárbol?

¿Cuáles son los escenarios típicos para cada uno?

Author: Nathan H, 2015-08-02

4 answers

¿Qué pasa si quiero que los enlaces apunten siempre al JEFE del repositorio externo?

Puedes hacer un submódulo para seguir la CABEZA de una rama de un submódulo repo remoto, con:

O git submodule add -b <branch> <repository> [<path>]. (para especificar una rama a seguir)
o git submodule update --remote que actualizará el contenido del submódulo a la última CABEZA de <repository>/<branch>, por defecto origin/master. Su proyecto principal seguirá rastreando los hashes de la CABEZA del submódulo incluso si se usa --remote.


 130
Author: VonC,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:18:17

El submódulo es link;

El subárbol es copia

 221
Author: Feng,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-02-22 08:34:35

La diferencia conceptual es:

Con submódulos de git normalmente desea separar un repositorio grande en otros más pequeños. La forma de hacer referencia a un submódulo es al estilo maven-estás haciendo referencia a una sola confirmación del otro repositorio (submódulo). Si necesitas un cambio dentro del submódulo tienes que hacer un commit/push dentro del submódulo, luego referenciar el nuevo commit en el repositorio principal y luego commit/push la referencia cambiada del repositorio principal. De esa manera tienes que tener acceso a ambos repositorios para la compilación completa.

Con subárbol de git integras otro repositorio en el tuyo, incluyendo su historial. Así que después de integrarlo, el tamaño de su repositorio es probablemente más grande (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 acceso a él a menos que desee obtener una actualización. Así que esta estrategia es más para el código y la reutilización de la historia - Yo personalmente no lo uso.

 94
Author: Niklas P,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-12-16 11:30:49

Submódulo
empujar un repositorio principal a un control remoto no empuja los archivos del submódulo

Sub-árbol
al enviar un repositorio principal a un repositorio remoto, se envían archivos de sub-árbol

 19
Author: Matt R,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-08-08 20:21:35