¿Cómo combinar dos proyectos en Mercurial?

84

Tengo dos repositorios mercuriales separados. En este punto, tiene sentido que "se conviertan en uno" porque quiero trabajar en los dos proyectos simultáneamente.

Realmente me gustaría que los dos proyectos fueran cada uno un subdirectorio en el nuevo repositorio.

  1. ¿Cómo fusiono los dos proyectos?
  2. ¿Es una buena idea o debo mantenerlos separados?

Parece que debería poder pasar de un repositorio a otro ... ¿Quizás esto sea realmente sencillo?

jm.
fuente

Respuestas:

69

Pude combinar mis dos repositorios de esta manera:

  1. Úselo hg clone first_repositorypara clonar uno de los repositorios.
  2. Úselo hg pull -f other_repositorypara extraer el código del otro repositorio.

La -fmarca (forzar) en la extracción es la clave; dice que se ignore el hecho de que los dos repositorios no son de la misma fuente.

Aquí están los documentos para esta función.

jm.
fuente
1
¿Esto también preserva las claves hash de las confirmaciones del segundo repositorio? (Supongo que no, pero podría estar bien hasta que hagas una fusión.)
Macke
6
Esto funciona, pero también deberá ejecutarlo hg mergepara que finalmente todo funcione
Factor Mystic
7
@Marcus Lindblom: tirando de un conjunto de cambios nunca, nunca cambiar su hash. Si observa hg glogdespués de hacer esto, verá que tiene dos líneas de conjuntos de cambios no relacionadas. El primer conjunto de cambios de cada línea no tiene padre, pero eso no es un problema para Mercurial. Una vez que haya extraído, querrá hacer un nuevo conjunto de cambios para cada línea donde esté hg mvtodo en la subcarpeta correspondiente, luego combine las líneas y estará listo.
Steve Losh
1
¿Qué pasa si los dos repositorios tienen un código común a ambos? ¿Eso sería manejado automáticamente por la fusión? y en cuanto a la fusión, no podemos decir $ hg fusionar?
Kamal
2
para fines de referencia, aquí está la documentación para este proceso mercurial.selenic.com/wiki/MergingUnrelatedRepositories
Gent
7

hg comenzó a tener subrepo desde 1.3 (2009-07-01). Las primeras versiones estaban incompletas e inestables, pero ahora es bastante utilizable.

Geoffrey Zheng
fuente
2
He encontrado que trabajar con subrepos es un fastidio. Funcionan, pero tienes que pasar por algunos obstáculos para que se comporten y pueden ser la fuente de muchos dolores de cabeza si no tienes cuidado.
Pete Duncanson
4
Vale la pena señalar que los subrepositorios son oficialmente una función de último recurso: mercurial.selenic.com/wiki/Subrepository (a partir de 2013.11.12)
jtpereyda
3

Si no está utilizando el mismo código en todos los proyectos, manténgalos separados. Puede configurar su repositorio personal de cada uno de esos proyectos para que sea solo un directorio aparte. ¿Por qué mezclar todas las ramas, fusionar y enviar comentarios cuando no es necesario?

Acerca de su edición: Pasar de un repositorio a otro. Siempre puedes usar el transplantcomando. Aunque, todo esto realmente está dejando de lado su deseo de combinar los dos, por lo que es posible que se sienta incómodo al usar mis sugerencias. Entonces puedes usar la extensión del bosque, o algo así.

hg transplant -s REPOSITORY lower_rev:high_rev
nlucaroni
fuente