web-dev-qa-db-fra.com

Conversion du dossier Mercurial dans un référentiel Git

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

J'aimerais mettre en miroir un dossier/fichier Mercurial spécifique dans un référentiel git. Ce que je cherche à faire, c’est d’exporter l’historique d’un fichier d’un référentiel Mercurial vers Git et de pouvoir le synchroniser avec les futurs commits.

Avez-vous des suggestions sur la façon de procéder? Je pense que la solution consiste à obtenir l'historique du correctif Mercurial, à exporter périodiquement chaque commit en tant que correctif et à appliquer les correctifs Mercurial au référentiel Git.

115
Simone Carletti

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
115
Yohann

Extension Hg-Git

Hg-Git peut être utilisé pour convertir un référentiel Mercurial en Git. Vous pouvez utiliser un référentiel local ou un référentiel distant accessible via SSH, HTTP ou HTTPS.

Exemple de conversion de référentiels locaux.

  1. Installez Hg-Git.

    • Sous Windows, TortoiseHg est fourni avec Hg-Git, bien que vous ayez besoin de l'activer via l'outil de paramétrage (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 marque-page hg est nécessaire pour éviter les problèmes, sinon hg-git envoie le fichier à la branche actuellement extraite qui déroute Git. Cela créera une branche nommée hg dans le référentiel Git. Pour obtenir les modifications dans le maître, utilisez les commandes suivantes (nécessaires uniquement lors de la première exécution, puis utilisez simplement git merge ou rebase):

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

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

  • utiliser Convertir une extension avec l'option --filemap Convertir une partie du dépôt original en plus petit avec seulement les fichiers nécessaires | répertoires
  • avec extension hg-git Poussez le repo dépouillé vers Git

ou (au lieu de hg-git), en utilisant Mercurial bridge dans Git , référentiel de clone | pull de Git

12
Lazy Badger

Gitify

Cela semble être une alternative plus moderne et 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
9
sorin

J'ai écrit exactement comment faire cela ici: Push to GitHub en utilisant Mercurial . J'utilise cette technique pour transférer plusieurs dépôts Mercurial vers GitHub depuis plus d'un an, sans aucun problème.

2
glyphobet

hg-git-fast-import

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

Un autre utilitaire avec les fonctionnalités suivantes:

  1. Importation de référentiels Mercurial uniques et multiples dans le référentiel Git.
  2. Importation de nouvelles révisions de référentiels Mercurial précédemment importés vers un référentiel Git.
  3. Mots clés.
  4. Branches fermées.
  5. Vérification du résultat final avec diff.

Vous pouvez télécharger le binaire pour vous plate-forme et mettre quelque part dans le chemin ou l'installer avec cargo (nécessite Rust pour être installé ):

cargo install hg-git-fast-import

Alors l'utilisation est comme ceci:

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

Il n'est pas nécessaire que Python et Mercurial soient installés. La configuration avancée permet de remplacer les auteurs ou les branches, de créer des branches avec le préfixe, etc.

0
Alexander Korolev

Sous Windows, cela peut être un peu délicat. Après avoir activé les bons plugins dans Mercurial (hggit), TortoiseHG peut également être utilisé. 

  1. Clone Mercurial repo
  2. Cloner git repo
  3. Activer la console: Activer la console
  4. En utilisant la console:

    % hg bookmarks hg

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

0
Ivasan