2011-10-31 24 views
5

Estoy desarrollando un sistema en el que estoy siguiendo los rastros de otro proyecto, agregando mis propias cosas pero no directamente al proyecto original. Configuré mi repositorio con tres ramas remotas:Fusionando sucursales remotas en git

  1. Maestro: donde ocurre mi desarrollo.
  2. Proveedor: donde sincronizo periódicamente el proyecto original.
  3. Integración: donde quiero combinar (maestro) y (proveedor) juntos.

Mi idea de flujo de trabajo es que la sincronización se realice automáticamente (ya que es básicamente un avance rápido), y la integración sea a medias manual (ya que requiere fusiones y correcciones). Tengo la primera parte (la sincronización) cubierta, pero no puedo determinar qué comandos/s emitir realmente para integrar el Máster y el Proveedor en la integración.

Ésta es la salida de git branch -a:

* integration 
    master 
    vendor 
    remotes/origin/HEAD -> origin/master 
    remotes/origin/integration 
    remotes/origin/master 
    remotes/origin/vendor 

¿Cómo voy hacia adelante desde este punto hasta:

  1. Sincronizar este espacio de trabajo con el repositorio remoto?
  2. ¿Merge vendor & master en integración?
  3. ¿Desea llevar la integración al repositorio remoto?

Y obviamente, si tengo algo mal en el flujo de trabajo me encantaría escucharlo.

+0

La rama de integración no es necesaria, la sucursal del proveedor ya tiene el código de Proveedor y Maestro. Tenga en cuenta que cada rama es en realidad una referencia, (puntero en C++), hace referencia al punto de confirmación. En ese caso, la sucursal de vendedor ya es lo que necesita en la rama de Integración –

+0

El proveedor en ese caso no tiene el código de la Maestra. Piense en ello como dos proyectos paralelos donde A (mi proyecto) necesita las actualizaciones de B (el otro proyecto) pero no al revés. –

Respuesta

2

Mientras que la rama integration no es estrictamente necesario (se puede integrar directamente en vendormaster, por rebase master en la parte superior de vendor), que puede ser útil.

La integración de una rama A en una rama B se puede hacer por:

  • fusión A en B (pero eso significa que cualquier desarrollo actual que tiene en B es "en espera" en espera de las resoluciones de cualquier conflicto de combinación y las repeticiones de todas las pruebas)
  • rebase B en la parte superior de A (git rebase A), pero que cambiaría B 's historia.

me rebase integration en la parte superior de Vendor, la resolución de cualquier conflicto allí, y luego fusionar integration en master, manteniendo master historia lineal.

+0

Quiero integrar continuamente el proveedor y el maestro sin interferir el progreso actual en el maestro (la integración mencionada es posiblemente muy larga), es por eso que necesito la rama Integración. La integración de Rebasing en el proveedor es una buena idea. Lo que me faltan son los comandos reales necesarios para hacer la fusión, ya que lo que probé en el pasado realmente no funcionó. –

+0

@EldadMor 'git checkout Integración; git rebase Vendor; maestro de pago de git; git merge Integration' debería ser suficiente. Eso supone que no inserta 'Integration' en un repositorio público, lo que le permite volver a establecer la base cada vez que lo necesite. – VonC

+0

Creo que eso es lo que intenté; Volveré a intentarlo y volveré con los resultados. ¡Gracias! –

Cuestiones relacionadas