206 votes

Interopérabilité Git avec un référentiel Mercurial

J'utilise GIT sur un Mac. J'en ai assez dit. J'ai les outils, j'ai de l'expérience. Et je veux continuer à l'utiliser. Pas de guerres ici...

Le problème est toujours à l'interopérabilité. La plupart des gens, l'utilisation de SVN, ce qui est excellent pour moi. Git SVN fonctionne hors de la boîte, et c'est un pas de fioritures solution. Les gens peuvent continuer joyeusement l'utilisation de SVN et je ne perds pas mon flux de travail et ni mes outils.

Maintenant... Certains gars viennent avec Mercurial. Très bien pour eux: ils ont leurs raisons. Mais je ne trouve pas de GIT, HG out-of-the-box. Je ne veux pas passer à HG, mais j'ai encore besoin d'interagir avec leur référentiel.

L'un de vous les gars, vous connaissez une solution simple pour cela?

117voto

felipec Points 3278

Il y a une nouvelle git-à distance-hg qui fournit un support natif:

Du pont dans Git, Mercurial et le Bazar

Il suffit de copier git-à distance-hg à votre $PATH, le rendre exécutable, et c'est tout, pas de dépendance, ou quoi que ce soit:

git clone hg::http://selenic.com/hg

Vous devriez être en mesure de pousser et tirer d'elle comme si c'était un natif dépôt Git.

Lorsque vous pousser de nouvelles branches Git, Mercurial signets sera créé pour eux.

Voir le git-à distance-hg wiki pour plus d'informations.

107voto

Abderrahim Kitouni Points 1021

Vous devriez être en mesure d'utiliser hg-git.

hg clone <hg repository>

edit ~/.hgrc et ajouter :

[extensions]
hgext.bookmarks =
hggit =

créer un signet de sorte que vous aurez un master dans git :

cd <repository>
hg bookmark -r default master

edit .hg/hgrc dans le référentiel et d'ajouter :

[git]
intree = true

maintenant, vous pouvez créer le dépôt git :

hg gexport

et vous pouvez utiliser ce dossier comme un git clone. en tirant à partir mercurial serait :

hg pull
hg gexport

et en le poussant vers mercurial :

hg gimport
hg push

(Oui, vous avez besoin d'utiliser hg avec ce flux de travail mais votre piratage sera tous dans git)

P. S. Si vous avez un problème avec ce flux de travail, veuillez soumettre un rapport de bogue.

64voto

dubiousjim Points 2259

Mise à jour de juin 2012. Actuellement il semble y avoir des méthodes suivantes pour Git/Hg interopérabilité lorsque le développeur souhaite travailler à partir de git côté:

  1. Installez Mercurial et le hg-git extension. Vous pouvez faire ce dernier à l'aide de votre gestionnaire de paquets, ou avec easy_install hg-git. Assurez-vous que le suivant est dans votre ~/.hgrc:

    [extensions]
    hggit = 
    

    Vous pouvez voir quelques références qui parlent de la spécification de l' bookmarks extension ici aussi, mais qui a été construit dans les Mercurial puisque v 1.8. Voici quelques conseils sur l'installation de hg-git sur Windows.

    Une fois que vous avez hg-git, vous pouvez utiliser des commandes à peu près comme Abderrahim Kitouni posté ci-dessus. Cette méthode a été affinée et tordu depuis 2009, cependant, et il est un accueillant wrapper: git-hg-nouveau. Il utilise le répertoire racine comme un répertoire de travail pour les deux Mercurial et Git en même temps. Il crée un Mercurial signet qu'il garde en phase avec la pointe de l' default (sans nom) de la branche dans le dépôt Mercurial, et il met à jour un local Git branch à partir de ce signet.

  2. git remote-hg est une autre enveloppe, également fondée sur l'Mercurial hg-git extension. Cette en outre fait usage de l' git-remote-helpers protocoles (d'où son nom). Il utilise le répertoire racine uniquement pour un Git répertoire de travail; il maintient son dépôt Mercurial nu. Elle dispose également d'un deuxième nue dépôt Git de faire la synchronisation entre Git et Mercurial, plus sûrs et plus idiomatique gitlike.

  3. Le git-hg script (anciennement maintenu ici) utilise une autre méthode, basée sur l' hg-fast-export de la fast-projet d'exportation. Comme la méthode 2, ce qui permet également de nu Mercurial référentiel et d'un autre nu dépôt Git.

    Pour tirer, cet outil ignore Mercurial signets et à la place des importations de chaque nommée Mercurial branche en branche Git, et la valeur par défaut (sans nom) Mercurial branche en maître.

    Certains commentaire explique cet outil comme étant hg->git, mais il prétend avoir fusionné dans git->hg push appuyer sur 7 Déc 2011. Comme je l'explique dans l'examen de ces outils, bien que, de la façon dont cet outil tente de mettre en œuvre pousser de soutien ne semble pas être réalisable.

  4. Il y a également un autre projet appelé git-à distance-hg. Contrairement à la version énumérés ci-dessus, celui-ci ne repose pas sur hg-git, mais plutôt pour accéder directement à l'Mercurial API Python. Pour le moment, son utilisation nécessite également une version patchée de git. Je n'ai pas essayé encore.

  5. Enfin, Adapter est un projet qui convertit progressivement entre une variété de différents Vcs. Il sonne comme le développement de ce ne sera pas agressivement poursuivi.

Les trois premiers de ces approches regardé suffisamment léger pour me convaincre de les étudier. J'avais besoin de les ajuster à certains égards, pour les faire fonctionner sur mon installation, et j'ai vu quelques façons de les ajuster à améliorer encore, et puis j'ai modifié encore à les faire se comportent plus comme de l'autre de sorte que je puisse évaluer de manière plus efficace. Ensuite, j'ai pensé que d'autres aimeraient avoir ces réglages trop, à en faire de même de l'évaluation. J'ai donc fait un paquet source qui va vous permettre d'installer mes versions de l'un des trois premiers outils. Il faut aussi prendre soin de l'installation de l'nécessaires hg-fast-export morceaux. (Vous devez installer hg-git sur votre propre.)

Je vous encourage à les essayer et de décider par vous-même ce qui fonctionne le mieux. Je serai heureux d'entendre parler de cas où ces outils pause. Je vais essayer de les garder en phase avec les changements en amont, afin de s'assurer en amont les auteurs sont conscients des réglages, je pense, sont utiles.

Comme je l'ai mentionné ci-dessus, l'évaluation de ces outils, j'en suis venu à la conclusion qu' git-hg n'est utilisable qu'en tirant à partir Mercurial, pas pour pousser.

A ce sujet, voici quelques comparaisons utiles/traduction de manuels d'entre Git et Mercurial, dans certains cas, destinée aux utilisateurs qui connaissent déjà Git:

15voto

sykora Points 30290

Vous pouvez essayer hg2git , qui est un script python et fait partie de fast-export, que vous pouvez trouver sur http://repo.or.cz/w/fast-export.git .

Vous aurez besoin d'avoir installé Mercurial.

9voto

Martin Geisler Points 44779

Puisque hg-git est un pont à deux voies, il vous permettra également de pousser les changesets de Git vers Mercurial.

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