2010-02-24 16 views
8

Uso git para mantener varias copias de trabajo de mi código. La idea es que puedo verificar cualquier rama, compilarla y ejecutarla para ver cómo la característica x de la rama encaja con el estado actual del código.Fusionando los cambios del maestro en todas las ramas usando Git?

La rama principal de Git es el tronco y las otras ramas del git son características o cosas que me gustaría probar. Por lo tanto, mi uso típico es actualizar el maestro con las últimas correcciones y luego fusionar el maestro en las ramas individuales para que cada uno de ellos se mantenga actualizado.

Este sistema funciona bien para mí, excepto por el hecho de que tengo que pagar una sucursal, fusionar el maestro y enjuagar/repetir para las otras ramas. Dado un sistema de control de versiones como git, no veo esta escala muy bien dado el hecho de que sería propenso a generar muchas ramas con el tiempo.

Sigo siendo un principiante git, así que sospecho que puede haber un mecanismo de git que ya tiene que me puede estar perdiendo. ¿Hay alguno? Si no, ¿cómo se compromete un cambio en todas las sucursales para que estén actualizadas por sí mismas?

+0

¿Tiene la implementación del código de esa pregunta? – edi9999

+0

No, inicialmente fue un proceso completamente manual. Esto fue también cuando yo era un principiante git. Ahora estoy usando git flow, que es muy similar, pero no me obliga a mantener varios scripts. – Carl

Respuesta

5

Una posibilidad (no probado a mí mismo) sería:

  • para establecer un acuerdo de recompra al descubierto donde se puede empujar a su rama principal.
  • tener un gancho posterior a recibir (ver githooks man page) en ese repo desnuda que luego empuje principal en cada "función" repo desea
  • tener un post-recibir el gancho por función repo para comenzar:
    • una rebase de su rama de características en la parte superior de la maestra (bien si aún no presionó su rama de entidad en otro lugar)
    • o una combinación de maestros en su rama de características.

todavía tendrá que llegar a tu repositorio función y comprobar si el rebase o fusionar no está bloqueado debido a algún conflictos de fusión.

+0

Sí, tendré que resolver manualmente cualquier conflicto de combinación. Gracias. No tenía idea de que los anzuelos existieran. Tengo algo que leer: http://kernel.org/pub/software/scm/git/docs/githooks.html – Carl

+0

@carleeto: buen punto, he agregado el enlace de la página man de githooks en mi respuesta. – VonC

+0

Parece que está sugiriendo varios repositorios en lugar de múltiples ramas. – Abizern

4

Si

  1. las ramas que desea fusionar el último maestro se compromete a no se publican y
  2. que quieren todos los envíos en maestra para estar en las otras ramas

entonces simplemente podría volver a establecer una base en el maestro después de que se haya actualizado el maestro. Este pequeño script podría funcionar si está usando un shell Unix. Reasigna cada rama en el maestro.

for BRANCH in `ls .git/refs/heads`; do git rebase master $BRANCH; done 
0

hago lo siguiente:

for BRANCH in $(ls git/refs/heads); do git checkout $BRANCH ; git merge origin/master $BRANCH ; done

+0

¿Realmente ejecutó esto? 'para b en $ (<.git/refs/heads); hacer eco $ b; done' no imprime nada, así que no puedo imaginarme cómo podría hacer algo. – Jeff

+0

Mi mal, el BRANCH var at for estaba usando $ BRANCH en su lugar. – 3manuek

+0

Puede ver en el código que proporcioné que ese no es el problema. – Jeff

Cuestiones relacionadas