tipos tag remove practices etiquetas crear best git git-submodules git-subtree

remove - git tag best practices



Diferencias entre submódulo git y subárbol (4)

¿Cuáles son las diferencias conceptuales entre usar git submodule y subtree?

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


La diferencia conceptual es:

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

Con git subtree integras otro repositorio en el tuyo, incluido su historial. Entonces, después de integrarlo, el tamaño de su repositorio es probablemente 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 acceso a él a menos que desee obtener una actualización. Entonces, esta estrategia es más para reutilizar el código y el historial; personalmente no la uso.


submódulo es enlace;

subárbol es copia


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

subárbol
empujar un repositorio principal a remoto empuja los archivos del subárbol


  • El submódulo se adapta mejor al desarrollo basado en componentes , donde su proyecto principal depende de una versión fija de otro componente (repositorio).
    Solo mantiene referencias en su repositorio principal ( gitlinks , entradas especiales en el índice )

¿Qué sucede si quiero que los enlaces siempre apunten a la CABEZA del repositorio externo?

Puede hacer 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>] . (para especificar una rama a seguir)
o git submodule update --remote que actualizará el contenido del submódulo al último HEAD desde <repository>/<branch> , por defecto origin/master . Su proyecto principal seguirá rastreando los hashes de HEAD del submódulo incluso si se usa --remote .

  • El subárbol se parece más a 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 .