2011-11-07 28 views
5

Al leer Mercurial, parece que siempre se ramifica y fusiona los repositorios completos.En Mercurial, ¿puedo fusionar solo algunos archivos entre dos ramas?

¿Es posible fusionar algunos archivos de una rama a otra? (Por ejemplo, solo deseo fusionarme en los archivos que corrigen un error determinado.)

Del mismo modo, puedo seleccionar algunos conjuntos de cambios, pero aún así tener un registro de fusión correcto, así que si completé la fusión más tarde, es ¿correcto?

Vengo de una "mentalidad" forzosa, por lo que puede estar pensando en esto de la manera incorrecta.

Respuesta

3

Al leer en Mercurial, parece que siempre ramifica y fusiona los repositorios completos .

¿Es posible fusionar solo algunos archivos de una rama a otra? (Por ejemplo sólo pueden desear fundirse en los archivos que corregir un error dado.)

Sólo tiene que tocar solamente "algunos archivos" en el conjunto de cambios es necesario y se funden rama con este conjunto de cambios en la cabeza con otra rama o trasplante en cualquier momento

Del mismo modo puedo cereza recoger algunos conjuntos de cambios, pero todavía tienen un registro de combinación correcta, por lo que si la fusión completa se realiza después es correcta?

Sí, puede trasplantar | cualquier conjunto de cambios a otra rama, el estado aplicado será recordado y los cambios no se duplicarán en la fusión final

+0

Gracias, no sabía que los conjuntos de cambios y las ramas podrían fusionarse. ¿Qué pasa si solo quiero algunos archivos en un conjunto de cambios determinado o algunos archivos de una serie de conjuntos de cambios? (Sería bueno si cada arreglo estuviera bien separado, sin embargo la vida real no siempre es agradable) –

+0

Algunos archivos de los conjuntos de cambios no son posibles de usar: ** siempre ** aplica ** cambios completos ** a otro árbol . Para cambiar los changeset en repo (malos modales de todos modos) puedes dividir-fusionarlo (mq, histedit) o ​​exportar como parche, editar, aplicar, por ejemplo –

8

Sí, Mercurial siempre ramifica y fusiona todo el árbol. No tiene la "flexibilidad" que le da algo como perforce para seleccionar archivos individuales para una combinación. Esto es algo bueno (confía en mí). Los conjuntos de cambios son atómicos (no se pueden dividir) e inmutables (no se pueden cambiar). Por lo tanto, esto necesita un poco de cambio de mentalidad.

Los conjuntos de cambios deben estar orientados a una tarea, y una tarea solamente. Si está solucionando un error, nada más va en el conjunto de cambios aparte de la corrección de errores. Luego tienes un conjunto de cambios que documenta la corrección de errores y no tienes el problema de querer dividirlo. No tendría sentido quererlo. La mitad de una corrección de errores a menudo es peor que ninguna corrección de errores.

Cuando se trata de la fusión que hay un par de opciones:

  • Una escuela de pensamiento dice que debe volver al lugar donde se introdujo el error. Arreglalo. Commit (hacer una pequeña rama anónima), y fusionar eso adelante en cualquier cabeza en la que lo desee (dev, stable, release, whatever). Sin embargo, esto no siempre es práctico.
  • Otro método es corregir el error en la rama de publicación y luego fusionarlo con la rama de desarrollo. Esto normalmente funciona bien.
  • Alternativamente, podría arreglarlo en la cabecera de su rama de desarrollo, pero luego si lo combina en su rama de publicación liberará todos sus cambios de desarrollo. Aquí es donde entra en juego el graft (new in 2.0) y la extensión anterior transplant.Permiten "seleccionar" una o varias colecciones de cambios de otra rama y colocarlas en otra rama.
+0

Hacer la distinción que las correcciones de errores van a la rama de publicación realmente me dio un momento de realización. Gracias. –

Cuestiones relacionadas