2010-12-07 13 views
8

Digamos que tengo dos sucursales en RepoX llamadas BranchA y BranchB. RepoX también tiene un submódulo llamado SubmoduleY.Git: Fusión y Submódulos

BranchA tiene SubmoduleY en la revisión 'abc', BranchB tiene SubmoduleY en la revisión 'def'.

Digamos que quiero fusionar BranchA en BranchB, pero quiero dejar SubMowuleY de BranchB apuntando a su revisión original de 'def'. Veo un par de maneras de hacer esto:

Método 1:

  1. Pedido BranchB.
  2. Mueva SubmoduleY a la revisión 'abc' para que la fusión real sea indolora (no queremos hacer ninguna fusión en el nivel de submódulo en este momento).
  3. Confirme la nueva revisión de SubmoduleY (no podemos tenerlo flotante para la fusión).
  4. Merge BranchA en BranchB. Resuelva cualquier conflicto.
  5. Mueva SubmoduleY a la revisión 'def'.
  6. Confirme la nueva revisión para SubmoduleY.
  7. Cambios de inserción hasta el repositorio principal.

Método 2:

Igual que el método 1, pero en lugar de hacer el paso 6, rebase y deshacerse de la sub-módulo adicional de confirmación desde el paso 3.

Ambos parecen tener inconvenientes molestos:

El método 1 pone dos confirmaciones adicionales en el historial.

El método 2 olvida cualquier cambio relacionado con las revisiones de los submódulos porque esos commits se eliminan. Por lo tanto, cualquier combinación más adelante tendrá que lidiar con algunos problemas de nuevo.

¿Hay una manera mejor?

Respuesta

7

Puede hacer una variación en su método 1, pero realice la confirmación que introduce el cambio en la versión del submódulo (en su paso 6) con --amend para que cambie el estado del submódulo en la fusión de confirmación. Dicho de otro modo, sería:

$ git checkout b 
$ git merge a 
Merge made by recursive. 
example.txt | 1 + 
sY   | 2 +- 
2 files changed, 2 insertions(+), 1 deletions(-) 
create mode 100644 example.txt 
$ cd sY 
$ git checkout def 
[... you get the "detached HEAD" warning ...] 
$ cd .. 
$ git add sY 
$ git commit --amend 

Tenga en cuenta que no me molesté en tratar de evitar que las submódulos en diferentes versiones antes de la fusión, como usted sugiere en su pregunta. Si hay un conflicto, puede elegir agregar el submódulo al def para resolverlo. Si no hay un conflicto, los pasos que mencioné anteriormente deberían funcionar bien.

+0

¡Solución agradable! Gracias. – Ben

Cuestiones relacionadas