2010-09-11 16 views
14

que tienen la siguiente situación:¿Cómo puedo empujar/tirar un conjunto de cambios individual entre repositorios en Mercurial?

  • tengo sitio A, que tiene su repo Mercurial, y hemos estado desarrollando durante algún tiempo. Digamos que A ha tenido 5 revisiones.
  • Ahora tenemos que crear el Sitio B, que es casi idéntico al sitio A, excepto en el diseño gráfico, en su mayoría. Así que cloné el repositorio, comencé el sitio B, y ahora el repositorio de B tiene toda la historia de A, además de un conjunto de conjuntos de cambios que nunca deberían volver a A (principalmente CSS e imágenes). Digamos que estos cambios me llevaron a 3 revisiones.
  • Finalmente, he hecho un cambio a B que me gustaría volver a A porque pertenece a ambos sitios. Esta es la revisión 9 en el repositorio de B.

La pregunta es: ¿cómo puedo mover la revisión 9 del repositorio de B al repositorio de A, sin mover también las revisiones 6-8?

  • He intentado empujar/tirar regularmente, pero eso mueve todos los conjuntos de cambios.
  • He intentado exportar paquetes o parches, pero aquellos se niegan a importar en A debido al padre faltante.

pensé que una de las bellezas de DVCS era que podía hacer este tipo de cosas con facilidad (que en el mundo VCS "centralizada" Podría arreglar fácilmente con ramas y fusión, lo he hecho con bóveda de una mucho y es bastante fácil).

¿Falta algo aquí?

NOTA: Miré en "MQ", pero parece ser una gran lombriz de gusanos, y parece que afectará el ciclo de confirmación normal solo para habilitarse. ¿Es esto correcto?

Cualquier ayuda o sugerencias serán muy apreciadas. ¡Gracias!

Daniel

Respuesta

11

https://www.mercurial-scm.org/wiki/wiki/TransplantExtension

Ver en "Uso de trasplante escoja a un conjunto de conjuntos de cambios":

trasplante puede gestionar múltiples conjuntos de cambios o conjunto de cambios rangos como esto:

hg transplant REV1:REV2 REV3 

Este ejemplo capturaría el rango de conjuntos de cambios especificados por REV1: REV2 y el conjunto de cambios adicional REV3 en el directorio de trabajo revisión.

Idealmente, ¿haría esto con las ramas?

+0

Sucursales: Hmmmm, no estoy seguro. No he tenido un gran éxito en la comprensión de Mercurial Branches :-) Estos son 2 sitios diferentes, que en mi HD tengo en 2 carpetas diferentes ... Sé cómo hacerlo con las sucursales en Vault, pero ¿cómo lo hago en Hg? Cuando traté de hacer algunas ramificaciones, básicamente tenía UNA carpeta de trabajo, y podía cambiar (* actualizar *) cuál de las ramas mostraba allí ... –

+0

Estaba sugiriendo tener dos ramas en cada una de esas carpetas (tres en total) . Uno con los commits compartidos y otro con los commits que nunca entrarán en el otro repositorio. Se fusiona en la rama compartida con las ramas específicas cuando lo necesita :-) Para obtener una explicación sobre las ramas de Mercurial: http://mercurial.selenic.com/wiki/Branch#Creating_a_Branch si tiene más preguntas, pregunte :-) – ikanobori

+0

Ah, interesante. Voy a experimentar con eso. ¡Gracias por la idea! –

11

pienso en los comandos de la siguiente manera:

  • hg bundle le da una versión binaria de un conjunto de cambios y hg unbundle se gire el paquete en exactamente el mismo conjunto de cambios en el lado receptor.

    Bundle y unbundle están ahí para transferir conjuntos de cambios sobre, por ejemplo, el correo electrónico y el parche binario dependen de los conjuntos de cambios de padres a estar presentes ..

  • hg export le da una representación de texto de un conjunto de cambios, y a menos que utilice el indicador de línea de comando --exact a hg import, luego de aplicar este parche no se creará exactamente el mismo conjunto de cambios en el lado de recepción.

    La ventaja de no utilizar --exact es precisamente que puede aplicar dicho parche en cualquier lugar siempre que no haya conflictos textuales.

  • hg transplant es solo una envoltura delgada alrededor de hg export y hg import.

1

Si alguna vez desea "doblar" o saltarse la historia en un acuerdo de recompra mercurial, sólo tiene que actualizar a la revisión base (antes de la sección que desea plegar). Si desea doblar todo lo anterior en un solo conjunto de cambios (esto parece ser lo que desea), simplemente revierte al jefe de esa rama y lo confirma (o solo confía los archivos que desea). Esto creará un nuevo conjunto de cambios con las cosas que deseas para que puedas llevar esto a tu sitio A. Lo que no quieres, simplemente lo ignoras (o lo quitas si no puedes ignorarlo).

Si tiene varios conjuntos de cambios sobre su pliegue que desea conservar, debe rebase. Habilite la extensión de rebase y vuelva a establecer la base 9 en # 5. Si hay hijos del n. ° 9, se moverán con él. Rebase es preferible al trasplante (lo que hace algo similar) porque rebase usa maquinaria de combinación de 3 vías para migrar conjuntos de cambios, lo que hace que sea más probable que tenga éxito. El trasplante es más o menos una importación de exportación tonta, por lo que ignora el historial común.

Cuestiones relacionadas