tag - ¿Cómo funciona exactamente el submódulo git?
git tag best practices (1)
Su submódulo se representa como una entrada especial con un modo especial (llamado gitlink , consulte " repositorios git anidados sin submódulos "):
(Consulte " Pasar por la última compilación de submódulos de git ")
new file mode 160000
index 0000000..4c4c5a2
Por lo tanto, no está revisando la versión "ÚLTIMA", sino siempre una SHA1 específica, y lo hace en un modo HEAD
DETACHED (consulte " ¿Cómo hacer que un submódulo con HEAD
separado se una al HEAD
real? ".
Eso no significa que no pueda actualizar un submódulo, como explico en " naturaleza verdadera de los submódulos ".
Para obtener más información sobre los submódulos, y sobre el posible motivo por el cual no desea usarlos (!), Lea el aleccionador artículo " Por qué su empresa no debe usar submódulos de Git ", de Amber Yust (también en SO ).
Solo un pequeño extracto, para patadas y risitas (el énfasis es mío):
Cuando
git submodule update
, busca en el repositorio principal un SHA para cada submódulo, va a esos submódulos y comprueba los SHA correspondientes.
Como sería el caso si revisó un SHA en un repositorio regular, esto coloca al submódulo en un estado HEAD separado.Si luego haces cambios en el submódulo y lo comprometes, Git creará felizmente el compromiso ... y te dejará quieto con un HEAD separado. ¿Ves a dónde va esto todavía?
Supongamos que se funden en algunos cambios más que incluyen otra actualización de submódulo. Si aún no has asignado tu propio cambio de submódulo al proyecto principal, Git no considerará tu nueva confirmación en el submódulo como un conflicto, y si ejecutas la
git submodule update
, borrará felizmente tu confirmación sin previo aviso, reemplazándola con eso de la rama en la que te fusionasteEspero que
reflog
habilitado elreflog
su submódulo o todavía tenga el antiguo commit en su terminal scrollback, porque de lo contrario, acaba de perder todo el trabajo que hizo .
Err ... "ouch".
Tenga en cuenta que ahora un submódulo puede rastrear lo último desde una bifurcación: vea " git submodule tracking latest ".
El archivo .gitmodule
solo especifica la URL del repositorio del módulo. ¿Cómo sabe el git submodule
qué versión descargar? Parece que siempre está revisando la última versión. Entonces, ¿cómo aseguran los desarrolladores la compatibilidad entre el proyecto principal y los submódulos?