2011-03-25 30 views
21

¿Esto es posible? Imagina que tengo proyectos Parent & Child. Ambos son repositorios git. Child es un submódulo de Parent.Edición de un submódulo de Git

¿Puedo hacer modificaciones en la versión de Child que está dentro del elemento primario & cometer & presionarlas igual que un repositorio normal?

¿O necesito un clon de Child por separado en algún lugar donde realice cambios?

Gracias.

+0

Vea también http://stackoverflow.com/questions/1979167/git-submodule-update/1979194#1979194 – VonC

Respuesta

26

No necesita una copia separada. La carpeta del submódulo es un mundo en sí mismo. Solo edite, comprométase, bifurque e impulse para deleite de su corazón.

Git es genial de esa manera. :-)

BTW, el repositorio principal incluso detectará cuándo ocurren cambios dentro de la carpeta del submódulo y le ofrecerá confirmar el estado actual del submódulo como el nuevo punto de referencia oficial para clones del repositorio principal.

Nota importante:

asegúrese de hacer git checkout master (o alguna otra rama) dentro de la carpeta submódulo antes de empezar a cortar.

Luego, también asegúrese de que cuando compromete el estado actualizado del submódulo, push se compromete con un repositorio público, o al menos no rebase o cambie el historial dentro del submódulo después, ya que eso dañaría la referencia del padre al historial del submódulo.

Pisa con cuidado. (Sombrero de punta a @pjmorse para el recordatorio.)

En resumen:

Sí. Desarrollar dentro de una carpeta de submódulo es posible y, a menudo, conveniente pero no sin sus riesgos. Elija su modelo de desarrollo sabiamente

+1

+1 al hacer una compra primero. Además, debe asegurarse de tener un repo Child limpio (con los cambios confirmados) antes de cambiar de rama o realizar otro trabajo en Parent. –

+0

No he tenido problemas con los cambios sin compromiso en los submódulos al trabajar en el repositorio padre al hacer un trabajo diario simple (editar, confirmar, extraer, enviar) en el padre. Sin embargo, cambiar las ramas y las operaciones de actualización de los submódulos puede ser arriesgado. ¡Buen punto! –

+0

No es una mala idea desarrollarse en un clon, solo para reducir sus posibilidades de cometer accidentalmente con HEAD separado. Por supuesto, también puede usar ganchos para verificarse. – Cascabel

4

De acuerdo con la documentation:

Si desea hacer un cambio dentro de un sub-módulo, primero debe comprobar fuera de una rama, realice los cambios, publicar el cambio dentro de la sub-módulo, y luego actualiza el superproyecto para hacer referencia al nuevo compromiso.

Por lo que puedo decir, si está trabajando en la rama donde se agregó el submódulo, puede editar Child y volver a su repositorio. Pero si no eres el desarrollador que agregó Child to Parent, estás trabajando con un jefe separado y necesitarás revisar una versión separada de Child para hacer cambios, o hacer los cambios y exportar los parches (usando git format-patch) para que alguien más se comprometa (a través del git am).

+0

"maestro" bien podría ser la rama que se echa un vistazo. ¡Pero tú haces un buen punto! –

Cuestiones relacionadas