144 votes

Convertir un dossier Mercurial en dépôt Git

Je n'ai pas une grande expérience de Mercurial, je suis surtout un gars de Git.

J'aimerais mettre en miroir un dossier/fichier Mercurial spécifique dans un dépôt git. Ce que j'essaie de faire, c'est d'exporter l'historique d'un fichier d'un dépôt Mercurial vers Git et d'être capable de le garder en synchronisation avec les futurs commits.

Avez-vous une suggestion sur la façon de procéder ? Je pense que la façon de procéder devrait être d'obtenir l'historique du patch Mercurial, d'exporter périodiquement chaque commit en tant que patch et d'appliquer les patchs Mercurial au dépôt Git.

1 votes

De nos jours, GitHub.com va l'importer pour vous .

0 votes

Voir aussi : une bonne présentation sur git-scm.com : git-scm.com/book/fr/v2/

127voto

Yohann Points 1224

Sur Linux ou tout ce qui comporte bash/sh ou similaire, ou python essayez avec exportation rapide :

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

0 votes

Je connais l'exportation rapide, mais elle ne résout pas mon problème car elle exporte l'intégralité du repo et le repo original fait plus de 1,5 Go.

1 votes

Ok, vous voulez garder git synchronisé avec mercurial ? Comme ce ?

0 votes

Ou vous pouvez utiliser Mercurial crochet sortant pour pousser vers git ?

66voto

naXa Points 862

Fenêtres : Extension Hg-Git de TortoiseHG

Hg-Git peut être utilisé pour convertir un dépôt Mercurial en Git. Vous pouvez utiliser un dépôt local ou un dépôt distant accessible via SSH, HTTP ou HTTPS.

Exemple de conversion de référentiels locaux.

  1. Installez Hg-Git.

    • Sous Windows, TortoiseHg est livré avec Hg-Git, bien que vous ayez besoin de le permettre via l'outil de réglage (dans la section extensions)

      TortoiseHg Settings

      ou manuellement dans ~/mercurial.ini

      [extensions]
      hggit =
  2. Utilisez les commandes suivantes pour convertir le référentiel :

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

Le site hg Le signet est nécessaire pour éviter les problèmes car sinon hg-git pousse vers la branche actuellement extraite en confondant Git. Cela va créer une branche nommée hg dans le dépôt Git. Pour obtenir les changements dans le master, utilisez les commandes suivantes (uniquement nécessaire lors de la première exécution, par la suite utilisez simplement git merge ou rebase ) :

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

13voto

Lazy Badger Points 30623

Vous pouvez (du côté de Mercurial) :

  • en utilisant Convertir l'extension avec --filemap option convertir une partie du repo original en un repo plus petit avec seulement les fichiers|répertoires nécessaires
  • avec l'extension hg-git pousser le repo dépouillé vers Git

ou (au lieu de hg-git), en utilisant Pont Mercurial dans Git cloner|tirer le dépôt de Git

11voto

sorin Points 23747

Gitify

Il s'agit d'une alternative plus moderne et plus facile à utiliser pour effectuer la conversion. 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

8voto

Sandre Points 284

Convertir un dépôt Mercurial en Git sur Windows 10

Si aucun problème avec l'encodage - utiliser l'extension Hg-Git TortoiseHG

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 quelque chose ne va pas avec l'encodage, utilisez l'exportation rapide.

Installer Bash

Ouvrez PowerShell en tant qu'administrateur et exécutez :

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

Installer Ubuntu 16.04 LTS à partir de Microsoft Store

Ouvrez Bash et exécutez

installer mercurial

sudo -s
apt-get update
apt install mercurial

récupérer fast-export v180317 (pour le moment les versions après 180317 ne fonctionnent pas correctement)

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 le référentiel

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

options d'encodage :

  • -f comme le codage -f cp1251
  • --fe codage du nom du fichier comme --fe cp1251

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X