svn version-control mercurial migration hgsvn

Cómo migrar/convertir de SVN a Mercurial(hg) en Windows



version-control migration (8)

Estoy buscando una herramienta para migrar un par de repositorios SVN a Mercurial, con historial, etiquetas, etc.

Estoy usando TortoiseHg (Windows x32), por lo que ConvertExtensions se descartan. Hay información sobre cómo hacer este proceso en una caja Linux ( hgsvn ), pero no tengo una máquina Linux disponible.

¿Puedo usar esos scripts de Python en Windows? Si es así, ¿qué necesito para hacerlo? O bien, ¿qué otras herramientas puedo usar para hacer este proceso?

Básicamente, ¿cómo puedo convertir un proyecto SVN a Mercurial?


  1. servidor svn de inicio en localhost
  2. hg convert svn: // localhost / your_repo
  3. hecho, porque los enlaces svn solo son necesarios para el protocolo file: //

¡Dios mío! Nadie todavía no menciona hgsubversion ( Extension Wiki ), que puede hacerlo sin casi ningún dolor de cabeza (excepto casos raros y un árbol específico).

Solo agregue la extensión, habilítela y hg clone SVN_REPO al repositorio local mercurial


Acabo de convertir un repositorio de SVN remoto con HTTP auth a un repositorio de Mercurial, y déjame decirte, no hay mucha documentación sobre cómo hacer esto. Tuve que descargar la fuente Mercurial e instalarla de forma independiente, usando el paquete fuente, de esa manera los enlaces SVN funcionarán de la manera correcta.

Lo instalé como:

python setup.py install

Lo cual funcionó bien en mi cuadro de Server 2003. Ahora puedo convertir un repositorio SVN de la manera correcta, haciendo algo como esto:

python c:/python26/scripts/hg convert <remote repo>

La documentación para ConvertExtension en el sitio de Mercurial no es muy clara, pero sí dice esto:

No hay forma de instalar los enlaces de Subversion en la biblioteca de Python incorporada de [Mercurial]. Entonces, necesitarás usar un Mercurial instalado encima de un Python independiente

Así que ahora solo uso la versión independiente para la conversión, y TortoiseHg para el trabajo real de VCS.


Esto está en las Preguntas frecuentes sobre TortoiseHg :

¿Cómo puedo convertir un repositorio de subversión a Mercurial?

Debe instalar las herramientas de línea de comandos svn-win32-1.4.6, luego agréguelos a su ruta. Entonces debes habilitar la extensión de conversión. En este punto, debe poder usar el comando '' hg convert '' para hacer la conversión. Dirija problemas / preguntas sobre la extensión de conversión a la lista de correo de Mercurial o #mercurial en irc.freenode.net .

Así que aparentemente es posible. Estoy usando Linux, así que no me he probado.



Para convertir un Repo SVN a un HG Repo Y copiarlo a un servidor diferente, necesitará algunas cosas.

  1. TortoiseHG instalado. (Compruebe para ver qué versión se está utilizando actualmente)
  2. Python instalado. (Compruebe para ver qué versión se está utilizando actualmente)
  3. Los módulos de Python (puedes encontrarlos en http://pysvn.tigris.org/project_downloads.html )
  4. Deberá agregar la extensión de convert a Tortoise. Inicie TortoiseHG Workbench desde el menú Inicio. Seleccione File -> Settings . Seleccione Extensions de la lista. Marque la casilla de verificación convert y haga clic en Aceptar.

Primero la conversión ...

  1. Lo mejor es mapear la Carpeta que el Repo SVN actual está en la computadora en la que está trabajando. (es decir, la //server/folder No correlacione la carpeta SVN Repo. Asigne la carpeta que está justo encima de ella) Dele una letra al disco mapeado, como Y:/
  2. Abra un comando Preguntar y escriba: CD /DY:/
  3. En el indicador Y:/ escriba: hg convert y:/RepoName (use el nombre del Repo actual) Tenga cuidado con las barras diagonales hacia adelante y hacia atrás. El que está en el comando es una barra inclinada. Además, si el nombre tiene espacios, ponga el nombre entre comillas. (es decir, Y:/"My Repo folder" )
  4. Ahora debería estar ejecutándose y creará otra carpeta junto con la anterior. Y una carpeta hg debería estar adentro. NO SERÁ INICIADO, Y NO INICIAR!
  5. La conversión esta completa.

Segundo, la clonación ...

  1. Abrir TortoiseHG Workbench. Ir a File -> Clone Repository
  2. Fuente: ingrese la ruta completa del repositorio convertido.
  3. Destino: ingrese la ruta completa de donde desea clonar el repositorio. No es necesario crear una carpeta en el nuevo destino ya que el proceso de clonación lo creará e inicializará.
  4. Agregue los permisos a la nueva carpeta clonada.
  5. ¡Ya terminaste!

Simplemente tuve que enfrentar este problema yo mismo. Tengo una máquina con Windows XP con un servidor de Windows separado que aloja el Servidor VisualSVN .

También tengo instalado TortoiseHG y el cliente de línea de comandos de Subversion CollabNet .

<Enable Convert Extension w/ Tortoise Hg 2>

Muchas gracias a bgever por señalar en los comentarios que con TortoiseHg 2.0, habilitar la extensión de conversión es más fácil que nunca. Como él dice

Con TortoiseHG 2.0, esto se simplificó mucho: inicie TortoiseHG Workbench desde el menú Inicio. Seleccione Archivo -> Configuración. Seleccione Extensiones de la lista. Marque la casilla ''Convertir'' y haga clic en Aceptar. ¡Eso es! Ya no es necesario intentar generar el archivo de configuración y buscarlo en el sistema de archivos. - Bgever Mar 11 a las 7:56

</Enable Convert Extension w/ Tortoise Hg 2>

<Enable Convert Extension Manually>

Para convertir un repositorio de SVN a HG, seguí estos pasos:

1) Abra C: / Archivos de programa / TortoiseHg / Mercurial.ini

EDITAR

FYI - Tortoise Hg ha migrado este archivo a

  • XP o anterior: C: / Documents and Settings / NOMBRE DE USUARIO / Mercurial.ini
  • Vista o posterior - C: / Users / NOMBRE DE USUARIO / Mercurial.ini

Ese archivo estará en su mayoría vacío y solo enumerará lo que desea anular allí. Si eso es lo que tienes, simplemente agrega estas dos líneas al final del archivo:

[extensions] convert =

2) Busque la línea que comienza con

[extensiones]

3) A continuación, verá una lista de palabras clave, comentada con un punto y coma (;) en cada línea

4) Encuentra la línea que dice

; convertir =

y borre el punto y coma para que se lea

convertir =

</Enable Convert Extension Manually>

5) Abra el símbolo del sistema y navegue hasta el directorio donde desea que se cree la nueva carpeta hg (el proceso creará una nueva carpeta llamada yoursvnreponame-hg en el directorio al que está abierto el símbolo del sistema).

6) Usa este comando

archivo de conversión hg: /// y: / yoursvnreponame

Descubrí que la herramienta de conversión puede tener problemas con los repositorios en red, así que tuve que asignarle una unidad, pero funcionó bien para mí.


mejor tarde que nunca ...

Dos respuestas por el precio de una ...

  1. Si se trata de un repositorio público de código abierto, puede usar http://svn2github.com/add/ que tardó aproximadamente media hora en clonar ese repositorio en GitHib y luego simplemente colocarlo en Hg.

  2. La ventaja de usar hg convert es que se puede reanudar. La conversión de SVN a Hg puede llevar días . Si detiene esto, continuará desde donde lo dejó.

A continuación se muestra un archivo por lotes que escribí porque Codeplex SVNbridge basura. El repositorio en este ejemplo tardó un par de días en recuperar toda la historia (estoy en Australia por lo que la latencia puede haber sido un factor). Me gustaría pensar que dio un buen golpe a un servidor TFS en algún lado.

Este archivo por lotes se puede ejecutar en cualquier momento para extraer actualizaciones de la fuente SVN si resultan ser las únicas que quedan en la tierra que todavía usan SVN. No lo he probado, así que mira qué pasa si haces esto, así que, si fuera tú, abandonaría la rama original si vas a editar el repositorio.

El material del robocopy shamap es mantener el historial de SVN si clonas el repo de Hg, el shamap es efímero, verifica el archivo por lotes y el shamap (lo haría en una nueva rama).

el lote...

@echo off mode con:cols=100 lines=800 :: Change the SVN remote name here :: set remote=https://cinch.svn.codeplex.com/svn :: title Fetching SVN from %remote%. This could take...DAYS echo . echo Fetching SVN checkins from %remote% echo . echo Dependencies: Tortoise Hg and hg.exe in the Path would be ideal. echo using hg convert echo . echo First, I will make a backup of shamap in the hg repo folder. echo If shamap in .hg/ is newer then it will be copied to the repo. echo You should commit it so hg clones of this repo work with this. echo Commit this .BeeyATch file as well. echo shamap keeps track of what has been fetched from SVN. echo ok, that ends the educational part of this script... echo Now I will fetch SVN changes from echo %remote% echo ... echo ...(this could take quite some time)... echo ...DAYS...yes...DAYS echo ...especially if it''s fecking Codeplex SVN... echo . echo If this craps out just run it again - it will resume from where it left off. echo and fetch the rest...eventually echo . echo Control C to abort or any other key to start: echo . pause echo . :: http://mercurial.selenic.com/wiki/ConvertExtension <== see for details of shamap :: copy the shamap from the original convert into the .hg folder unless it is already there & newer :: don''t panic if shamap is much bigger than the original - diff it to see why robocopy ./ ./.hg/ shamap /XO robocopy ./.hg/ ./ shamap /XO echo . hg convert --verbose --debug %remote% "%CD%" echo . echo . echo Finished fetching from %remote% title Finished fetching from %remote% echo Any key to Exit echo . pause exit