2012-05-04 30 views
24

tengo 3 repos, A, B y C, todos relacionados con el mismo proyecto. A es la versión más antigua del proyecto, B es un experimento que realmente no fue a ninguna parte y C es la última versión de trabajo. Todos estos repos tienen archivos diferentes, son implementaciones diferentes del mismo producto.La fusión de dos depósitos diferentes

Me gustaría fusionar estos 3 repos en uno manteniendo su historial, esto es vital. Supongo que quiero apilar B en la parte superior de A y C en la parte superior de B, pero cuando pago el proyecto solo quiero obtener los cambios relacionados con el repo C.

Mi idea es etiquetar o crear una rama con nombre en A, hg rm *, cometer y luego apilar B en la parte superior. Repite lo mismo con B para poder apilar C y luego continuar con el proyecto como siempre.

¿Qué opinas? Además, algo de inspiración para lo que quiero hacer: 1, 2.

+3

Posible duplicado de http://stackoverflow.com/q/12843/950708 – andruso

Respuesta

30

simplemente Puede tirar de los conjuntos de cambios en un repositorio grande. Comenzar con el un acuerdo de recompra:

$ hg init combined 
$ cd combined 
$ hg pull ../A 
$ hg update 

Entonces tire con fuerza en B y el maniquí de combinación de las dos cabezas de modo que mantenga los archivos de B:

$ hg pull ../B --force 
$ hg merge --tool internal:other 
$ hg revert --all --rev tip 
$ hg commit -m "Merge A and B, kept B" 

luego repetir para C:

$ hg pull ../C --force 
$ hg merge --tool internal:other 
$ hg revert --all --rev tip 
$ hg commit -m "Merge B and C, kept C" 

Eso le da tres líneas de historia y un punto de fusión en el que primero desecha A, luego B, y finalmente termina con C.

Como alternativa, puede usar convert extension con un mapa de empalme para unir los tres historiales. Comience por tirar de la fuerza todos los conjuntos de cambios en un único repositorio. Luego haga una conversión de Mercurial a Mercurial donde agrega la punta de A como el primer padre de la raíz de B. Similarmente para B y C. Eso le da una larga historia en la que habrá un cambio muy abrupto cuando pase de A a B y de B a C.

Me gustaría ir con la primera opción: es la más explícita y muestra mejor lo que sucede sin falsificar (convertir) el historial.

+0

Cuando vuelvo a generar --todo consejo por primera vez aborta con fusión no confirmada sin revisión especificada. – ruipacheco

+0

@Cocoaster: perdón por eso, olvidé un '--rev' en el comando. He reescrito con un mejor comando. –

+0

Además, ¿no le falta un "consejo de actualización de hg" para C? – ruipacheco

Cuestiones relacionadas