Tuve que separar un número selectos de archivos de un repositorio y de ellos crear uno nuevo. Me interesaba conservar el historial de cambios; y me encontré una página que decía que se podía hacer con hg convert
.
Mi anterior experiencia con hg convert
había sido breve y sin éxito: había querido mover un repositorio CVS a Mercurial. Pero en aquella ocasión el problema, si mal no recuerdo era que hg
no encontraba el comando cvs.exe (por alguna razón cvsnt.exe no era aceptable).
Tiempo después lo logré en Linux (ver abajo).
Antes de empezar, se debe habilitar la extensión. En tu archivo hgrc, debes poner:
[extensions]
convert =
Pero para convertir de Mercurial a Mercurial, funcionó tal y como dice en la página (utilizando el parámetro filemap); pero con unas pequeñas modificaciones...
.. ya que por alguna extraña razón, tuve que poner cada archivo individualmente en una línea. Es decir que no pude hacer:
include "Queue.c Queue.h strf_utils.c strf_utils.h stdop.h"
(no me dejó hacer un update después) .. sino que tuve que poner lo siguiente:
include Queue.c
include Queue.h
include strf_utils.c
include strf_utils.h
include stdop.h
Y ya con eso si pude convertir el repositorio; ejecutando:
hg convert --filemap mapa.txt NombreRepoActual NombreDest
... remarcando que para que funcione, hay que hacer un update
después de la conversión.
hg convert
para extraer los 4 archivos que me interesaba mover en un repositorio nuevo.hg pull -f
(donde -f
indica que se quiere forzar).hg merge
, para que incluyera los cambios de ambos repositorios (de lo contrario borra los archivos ya existentes en el destino).hg commit
; para que quedara registrado el merge.La imágen a la derecha muestra la gráfica de cambios (en el TortoiseHg Workbench) después de haber hecho el merge.
Tiempo después intenté de nuevo convertir de CVS a Mercurial; pero en esta ocasión en Linux.
Me topé con 2 errores:
Primero, que $CVSROOT
apuntaba a /var/cvs
; pero en realidad era un link a /otra/localidad
. Bastó con cambiar el checkout de CVS a algo como:
cvs -d:ext:usuario@servidor:/otra/localidad co MiProyecto
El segundo problema fue que al hacer el hg convert MiProyecto
, se trababa leyendo el historial. No supe a ciencia cierta cómo es que finalmente comenzó; pero lo interrumpí y reinicié varias veces. Afortunadamente, hg convert reanuda leyendo el historial desde donde se quedó.
De nueva cuenta: hay que hacer un update
después de la conversión.