Conversión de la carpeta Mercurial a un repositorio Git


137

No tengo una gran experiencia con Mercurial, soy principalmente un tipo Git.

Me encantaría reflejar una carpeta / archivo Mercurial específico en un repositorio git. Lo que realmente estoy tratando de hacer es exportar el historial de un archivo desde un repositorio de Mercurial a Git y poder mantenerlo sincronizado con las futuras confirmaciones.

¿Tiene alguna sugerencia sobre cómo proceder? Creo que el camino a seguir debe ser obtener el historial del parche Mercurial, exportar periódicamente cada confirmación como un parche y aplicar los parches Mercurial al repositorio de Git.


Hoy en día, GitHub.com lo importará por usted .
Brad Turek

Respuestas:


125

En Linux o cualquier cosa con bash/sho similar, o pythonintente con exportación rápida :

cd
git clone git://repo.or.cz/fast-export.git
git init git_repo
cd git_repo
~/fast-export/hg-fast-export.sh -r /path/to/old/mercurial_repo
git checkout HEAD

1
Ok, ¿quieres mantener git sincronizado con mercurial? Me gusta esto ?
Yohann

1
Tenga en cuenta que '/ ruta / a / old / mercurial_repo' debe ser una ruta en el sistema de archivos (no una URL), por lo que debe clonar el repositorio original antes.
mar10

1
En mi caso tuve que usar PYTHON=python2 ~/fast-export/hg-fast-export.sh -r /path/to/old/mercurial_repo. Aparte de eso, funcionó a la perfección.
Artur Czajka

55
Gracias por una respuesta concisa! Tuve que sudo easy_install mercurialprimero. Sería bueno tener en las instrucciones
Marcus Westin

3
Si está en una máquina con Windows, use Git bash y ejecute hg-fast-export.sh
Augustas

61

Windows: extensión TortoiseHG Hg-Git

Hg-Git se puede usar para convertir un repositorio Mercurial a Git. Puede usar un repositorio local o un repositorio remoto al que se accede a través de SSH, HTTP o HTTPS.

Ejemplo de conversión de repositorios locales.

  1. Instalar Hg-Git.

    • En Windows, TortoiseHg viene con Hg-Git, aunque debe habilitarlo a través de la herramienta de configuración (en la sección de extensiones)

      Configuración de TortoiseHg

      o manualmente en ~/mercurial.ini

      [extensions]
      hggit =
      
  2. Use los siguientes comandos para convertir el repositorio:

    $ mkdir git-repo; cd git-repo; git init; cd ..
    $ cd hg-repo
    $ hg bookmarks hg
    $ hg push ../git-repo
    

El hgmarcador es necesario para evitar problemas ya que, de lo contrario, hg-git empuja a la rama actualmente extraída, lo que confunde a Git. Esto creará una rama nombrada hgen el repositorio de Git. Para obtener los cambios en el maestro, use los siguientes comandos (solo necesarios en la primera ejecución, luego use git mergeo rebase):

$ cd git-repo
$ git checkout -b master hg

He encontrado que git-hg es bastante defectuoso, pero esto funcionó de maravilla y no requirió descargas adicionales, lo cual es bueno.
Timmmm

2
Quería una carpeta, no todo el repositorio.
Simone Carletti

github ahora tiene una herramienta que lo admite directamente desde github, consulte stackoverflow.com/questions/16037787/…
Tommy

@SimoneCarletti Echa un vistazo a esta pregunta . Debería ayudarlo a exportar un archivo / carpeta y su historial en un repositorio temporal. Luego puede usar cualquiera de las soluciones proporcionadas para convertir el repositorio temporal de Mercurial a Git.
naXa

13

Puedes (desde el lado de Mercurial):

  • usando la extensión Convertir con la --filemapopción de convertir parte del repositorio original en más pequeño con solo los archivos | directorios necesarios
  • con extensión de hg-git push repo despojado a Git

o (en lugar de hg-git), usando el puente Mercurial en Git , clone | extraiga el repositorio de Git


11

Gitify

Parece una alternativa más moderna y fácil de usar para realizar la conversión https://github.com/buchuki/gitifyhg

pip install gitifyhg
git clone gitifyhg::<hgrepoaddress>
# done, you have a git repo with the entire history of the hg one

1
No quería convertir un repositorio completo, solo una carpeta.
Simone Carletti

1
¡Increíble! Tenga cuidado con el error Unicode, aunque github.com/buchuki/gitifyhg/pull/98
Andrei

3
Nota: gitifyhg está actualmente desactualizado con las últimas versiones de Mercurial.
Zoran Pavlovic

4

Convierta un repositorio Mercurial a Git en Windows 10

Si no hay problemas con la codificación, use la extensión TortoiseHG Hg-Git

md new-repo && cd new-repo
git init --bare .git
cd ..\old-mercurial-repo
hg bookmark -r default master
hg push ..\new-repo
cd ..\new-repo
git config --bool core.bare false

Si hay algún problema con la codificación, use la exportación rápida

Instalar Bash

Abra PowerShell como administrador y ejecute:

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux

Instalar Ubuntu 16.04 LTS desde Microsoft Store

Abre Bash y corre

instalar mercurial

sudo -s
apt-get update
apt install mercurial

obtener la exportación rápida v180317 (en este momento las versiones posteriores a 180317 no funcionan correctamente)

cd /mnt/c/path_to_work_folder
git clone https://github.com/frej/fast-export.git
cd fast-export
git checkout tags/v180317
cd ..

convertir repositorio

git init new-repo && cd new-repo
git config core.ignoreCase false && git config core.quotepath off
../fast-export/hg-fast-export.sh -r ../path_to_mercurial_repo/ --fe cp1251
git checkout master

opciones de codificación:

  • -f codificación, como -f cp1251
  • --fe codificación de nombre de archivo como --fe cp1251

3

hg-git-fast-import

https://github.com/kilork/hg-git-fast-import

Otra utilidad con las siguientes características:

  1. Importación de repositorios Mercurial únicos y múltiples al repositorio Git.
  2. Importación de nuevas revisiones de repositorios Mercurial previamente importados al repositorio de Git.
  3. Etiquetas
  4. Ramas cerradas
  5. Verificación del resultado final con dif.

Puede descargar el binario para su plataforma y colocarlo en algún lugar de la ruta o instalarlo cargo( rustdebe estar instalado ):

cargo install hg-git-fast-import

Entonces el uso es así:

hg-git-fast-import single /path/to/source_hg /path/to/target_git

No necesita Pythony Mercurialpara ser instalado. La configuración avanzada permite reemplazar autores o ramas, hacer ramas con prefijo y más.


2

Si está utilizando github.com , parece que tienen una función de importación que le permite simplemente escribir la URL de su proyecto hg.

Primero cree un nuevo repositorio y luego, en la página de inicio del nuevo repositorio, desplácese hasta la parte inferior y haga clic en el botón "Importar código" .

contexto para el botón de código de importación

Luego escriba la URL de su repositorio anterior y presione "Comenzar importación".

contexto para el botón "Comenzar importación"

¡Entonces GitHub se encarga del resto!

Github se ocupa de los negocios por ti

Tenga en cuenta que GitHub le pedirá sus credenciales para el antiguo repositorio si las necesita.

¡Oh! Encontre la guia oficial


0

En Windows puede ser un poco complicado. Después de habilitar los complementos correctos en mercurial ( hggit), también se puede utilizar TortoiseHG.

  1. Clon mercurial repo
  2. Clon git repo
  3. Habilitar consola: habilitar la consola
  4. Usando la consola:

    % hg bookmarks hg

    % hg push <relative path to>/<git-repo>


0

Tal vez ayude a alguien hoy (cuando convierte un repositorio mercurial a git, mientras conserva el historial). Probado para trabajar con mercurial 4.0.1.

~$ git clone https://*old_hg_repo*
~$ git clone https://github.com/frej/fast-export.git
~$ cd fast-export
~$ git checkout tags/v180317
~$ cd ..
~$ mkdir new_git_repo
~$ cd new_git_repo
~$ git init
~$ .../fast-export/hg-fast-export.sh -r ../old_hg_repo/ --force
~$ git checkout HEAD

Y finalmente para impulsar su repositorio local recién convertido.

~$ git push REMOTE '*:*'
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.