Estoy usando git diariamente por un tiempo, y esta vez me he encontrado con un problema que podría describir de esta manera.Repositorio git "Capas"
Tengo un repositorio que contiene toda la estructura del sitio web, y la raíz web está en la raíz del repositorio. Todo estaba bien hasta que fue repositorio de un solo sitio. Sin embargo, ese mismo repositorio ahora se usa para varios sitios, básicamente el mismo sitio, en diferentes idiomas, pequeños retoques de plantillas, diferentes gráficos, etc. Esos elementos tienen una versión natural.
Hay una rama principal, que contiene el código fuente original del sitio, y me gustaría tener el maestro (o alguna otra rama) para contener el código que es universal en todos los sitios, ya que eventualmente habrá cambios que son demasiado específicos del sitio para incluirlos en la parte universal del repositorio.
A continuación, hay una rama para cada sitio que utiliza este código fuente. Todas esas ramas (por ejemplo, site1, site2 y Sitio3) se crean a partir rama principal, y cada sitio clones rama correcta.
Bueno, me pareció una buena idea, hasta que comencé a hacer cambios en todas partes.
Si realicé un cambio en la rama site1, y necesitaba copiar ese cambio en la rama site2, seleccionaría la confirmación de una rama a otra. La fusión es imposible, ya que hay otros cambios en la rama de sitio1 que no pertenecen a la rama de sitio2. ¿Hay alguna otra solución más elegante para este tipo de situación, o es que la recolección de cerezas es exactamente para este propósito?
Ahora, el verdadero "problema" para mí es cuando cambio de maestro, y luego quiero copiar todos esos cambios en todas las ramas. Naturalmente, considerando el hecho de que todas las ramas son descendientes de master, y que I do desea esos cambios en todas las ramas del sitio *, cambio a cada rama y maestro de fusión.
Esto crea una historia bastante desagradable para todas las ramas. Cada ronda de fusiones complica gráfico considerablemente, lo que me lleva a dos conclusiones:
- esta forma de capas ramas pueden trabajar, siempre y cuando veo a mi paso y no hacer nada estúpido, y no tratando de conseguir cualquier sentido fuera del gráfico de historial de todas las ramas. O ..
- tiene que haber alguna forma mejor y más adecuada de hacerlo.
Para ilustrar mi "problema", daré una imagen del gráfico que obtuve después de crear esas ramas, agregando algunas confirmaciones específicas de la rama, escogiendo algunas de ellas, agregando y fusionando una confirmación del maestro a todas las ramas, comprometer o dos a ramas específicas, y luego una fusión maestra a todos.
No sé, me gusta la simplicidad, y tal vez yo no estoy acostumbrado a ver y difíciles de seguir gráficos como éste (que sólo crecerán en complejidad con cada fusión siguientes, yo 'tengo miedo).
Supongo que podría hacer todo el camino, y tener un buen historial de historia, pero eso tampoco suena bien, ya que podría hacer varios commits seguidos, y luego olvidar elegir uno de ellos para todas las otras ramas ...
Entonces ... ¿Alguna idea, experiencia o sugerencia que no le importaría compartir?
ACTUALIZACIÓN: Elijo una solución que se describe en mi comentario sobre la respuesta aceptada. ¡Gracias a todos los que contribuyeron!
ACTUALIZACIÓN 2: A pesar de que no está fuertemente relacionada con esta cuestión, recently I stumbled upon this model of branching que parece ser adecuado para casi cualquier ciclo de desarrollo organizado, con GIT como DVCS subyacentes. Es una muy buena lectura. Recomendado.
Menos tiempo para una respuesta, pero eche un vistazo a 'rebase'. – KingCrunch
La fusión puede no ser tan mala como crees. Fundamentalmente, una fusión significa "incorporar todo desde otra rama a esta", lo que parece que es lo que quieres hacer. Puede usar 'git merge --log' para incluir una lista de los temas de la confirmación fusionada en su mensaje de confirmación de fusión, y luego use' git log --first-parent' (o 'gitk --first-parent' ') para ver su historial en las ramas del sitioX. – Cascabel