Mercurial: ¿Cómo fusionar con el control manual sobre los cambios y los archivos?

StackOverflow https://stackoverflow.com/questions/2414759

  •  19-09-2019
  •  | 
  •  

Pregunta

Nota: El escenario que describo aquí no se responde en Overflow de pila: completamente manual de fusión mercurial.

Explicaré mi consulta con un ejemplo. Supongo que comienzo un repositorio mercurial para diseñar un coche:

C:\Car$ dir
Car.cpp
Car.h

Trabajo en el diseño del automóvil durante bastante tiempo y el repositorio parece:

r0-r1-...-r100-(default)

En algún momento me rama defecto a Solar trabajar en un automóvil con energía solar en paralelo:

C:\SolarCar$ dir
Car.cpp
Car.h
Solar.cpp
Solar.h

Después de un poco más de tiempo, el repositorio se ve como:

r0-r1-...-r100-...-r200-(default)
            \--r101-...-r201-(SolarCarBranch)

Como me fusiono Solar de regreso defecto?

Tome nota de las siguientes complicaciones en la fusión que quiero:

  1. Debería poder continuar trabajando en ambos defecto y Solar Después de la fusión.
  2. Puede haber soluciones de eficiencia de combustible en Car.cpp y Car.h en Solar que quiero meterse en defecto, sin embargo, no quiero todos los cambios en esos archivos. Entonces, quiero elegir los cambios en los que quiero que me incluyan defecto durante la fusión (también conocido como fusión manual).
  3. hago no desear Solar.cpp y Solar.h apareciendo en defecto. Es posible que el mundo aún no esté listo para un automóvil con energía solar. ;-)

Lo que he aprendido:

  1. Esto es posible por un hg merge SolarCarBranch
  2. Esto se puede lograr mediante la configuración kdiff3.premerge=False en Mercurial.ini
  3. No sé cómo lograr esto desde premerge=False Todavía se fusiona/copias Solar.cpp y Solar.h dentro defecto sin pedirme permiso.
¿Fue útil?

Solución

Estás muy cerca y no necesitas recurrir al trasplante (asquera) o la recolección de cerezas en general. Apagar premerge es el primer paso, y luego simplemente elimine los archivos que no desea en la rama principal después de fusionarse pero antes de comprometerse. Solo tendrás que hacerlo una vez.

Aquí hay una configuración:

o  changeset:   3:343d531512a3
|  branch:      solar
|  tag:         tip
|  parent:      1:cb26642f8db5
|  user:        Ry4an Brase <ry4an@msi.umn.edu>
|  date:        Wed Mar 10 11:16:48 2010 -0600
|  files:       afile
|  description:
|  solar-change
|
|
| @  changeset:   2:c5d14e34db07
| |  parent:      0:56465175b2fc
| |  user:        Ry4an Brase <ry4an@msi.umn.edu>
| |  date:        Wed Mar 10 11:05:44 2010 -0600
| |  files:       other-main-file
| |  description:
| |  moremain
| |
| |
o |  changeset:   1:cb26642f8db5
|/   branch:      solar
|    user:        Ry4an Brase <ry4an@msi.umn.edu>
|    date:        Wed Mar 10 11:04:32 2010 -0600
|    files:       solar-only
|    description:
|    solar-initial
|
|
o  changeset:   0:56465175b2fc
   user:        Ry4an Brase <ry4an@msi.umn.edu>
   date:        Wed Mar 10 11:04:14 2010 -0600
   files:       afile
   description:
   initial

Puede ver que ChangsET 1 agrega un archivo a la rama solar, un archivo que no queremos en valor predeterminado. Mientras que ChangeSet 3 modifica un archivo que también existe en Main, Afile, y queremos controlar manualmente si ese cambio ocurre o no.

También hg update default ; hg merge -r solar. La herramienta de fusión aparecerá para afile Y decidimos línea por línea o porta por chunk si queremos esos cambios. Después de salvar hacer un hg stat:

% hg stat
M afile
M solar-only

Y vemos que solo solar está en cola para cometer en valor por defecto. Solo quítalo (con if).

% hg rm -f solar-only

Ahora hg stat lo muestra como eliminado:

% hg stat
M afile
R solar-only

Y cuando nos comprometamos, tendremos lo que queremos en la nueva ET de cambios.

Otros consejos

Su primera condición, para poder continuar trabajando en ambas ramas, se satisface simplemente al no cerrar la rama (que hace con el --close-branch opción hg commit).

Puede elegir los conjuntos de cambios para fusionar el uso del uso de la Extensión de trasplante. Esto le permitirá elegir solo conjuntos de cambios específicos para fusionarse en el valor predeterminado.

La tercera condición se satisface con la idea de que siempre que no mezcle los cambios en su automóvil normal y su automóvil con energía solar en la misma confirmación, puede retirar los conjuntos de cambios de la rama solar con impunidad y no tener que preocuparse por Mezclar los tipos de automóviles.

Es posible que desee mirar el internal Opción de banderas en el Fusionar documentos de configuración también.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top