¿Cuáles son las diferencias conceptuales entre usar git submodule y subtree?
¿Cuáles son los escenarios típicos para cada uno?
¿Cuáles son las diferencias conceptuales entre usar git submodule y subtree?
¿Cuáles son los escenarios típicos para cada uno?
Respuestas:
¿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 de <repository>/<branch>
forma predeterminada origin/master
. Sin embargo, su proyecto principal seguirá los hashes de HEAD del submódulo, incluso si --remote
se usa.
add -b
y, --remote
posteriormente, en los comandos de actualización, según la documentación de actualización del submódulo . En ese caso, ¿ -b
todavía se necesita realmente para seguir a HEAD of master?
-b
se usa para generar los metadatos .gitmodule correctos para el submódulo (es equivalente a a git config -f .gitmodules submodule.<path>.branch <branch>
).
--remote
: --remote
funciona también si -b
no se ha utilizado add
. En ambos casos, la actualización provocará una confirmación en el repositorio principal que aloja el submódulo, por lo que los enlaces realmente "no siempre apuntan al HEAD" de una manera muy automática ... o no lo entendí, o esa afirmación es mejor que se elimine de la respuesta original (?)
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 única confirmación del 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.
git subtree
contigo también puedes empujar, si quieres, ¿verdad?
el submódulo que
empuja un repositorio principal a un control remoto no empuja los archivos del submódulo
el subárbol que
empuja un repositorio principal a remoto empuja los archivos del subárbol
git -c diff.mnemonicprefix=false -c core.quotepath=false -c credential.helper=sourcetree push -v --tags production refs/heads/master:refs/heads/master