76 votes

Git comme client mercuriel ? Pourquoi pas de git-hg ?

C'est une question qui me préoccupe depuis un certain temps. J'ai fait mes devoirs et vérifié stackoverflow et j'ai trouvé au moins ces deux sujets sur ma question : Git pour Mercurial comme git-svn et Interopérabilité de Git avec un référentiel Mercurial

J'ai fait de nombreuses recherches sur Internet pour résoudre ce problème, mais sans succès jusqu'à présent. J'ai également lu le Internes de Git livre, et le Les coulisses de Mercurial Definitive pour essayer de résoudre ce problème. Je suis toujours un peu perplexe quant à la raison pour laquelle je n'ai pas été en mesure de trouver un outil approprié de type git-hg.

De mon point de vue, git-svn est l'une des principales caractéristiques pour lesquelles j'ai choisi d'utiliser git plutôt que mercurial, y compris au travail. Cela me permet d'utiliser un flux de travail que j'aime, et personne d'autre n'a besoin de s'en préoccuper, si cela ne les intéresse pas. Je ne vois pas l'intérêt d'utiliser le repo hg intermédiaire pour faire des allers-retours, comme le suggère l'une des chaînes.

De toute façon, d'après ce que j'ai lu, hg et git semblent très similaires dans leur conception. Il y a différences sous le capot mais rien de tout cela ne devrait empêcher la création d'un client git pour hg. Il me semble que les branches de suivi à distance et les fusions octopus rendent git encore plus puissant que hg.

Donc, la vraie question est la suivante : y a-t-il une raison réelle pour laquelle git-hg n'existe pas (ou du moins est très difficile à trouver) ? Y a-t-il une certaine animosité des utilisateurs (et des développeurs) de git envers leurs homologues de hg qui a causé l'absence de l'outil git-hg ? L'un d'entre vous a-t-il l'intention de développer un tel outil et de le rendre public ? Je pourrais me porter volontaire (bien qu'avec de très faibles compétences en C) pour participer à la réalisation de ce projet. Je ne possède tout simplement pas toutes les connaissances nécessaires pour le faire moi-même.

Serait-ce l'outil qui mettrait définitivement fin à toutes les guerres de DVCS ?

36 votes

@pajton : ou parce que git est bien meilleur que hg n'est-ce pas ?

4 votes

Git-hg existe (maintenant). stackoverflow.com/questions/5225666/

20voto

akaihola Points 10007

Je n'ai pas essayé, mais il semble qu'il y ait un git-hg projet. Le projet se décrit lui-même sur la page et le README comme :

Un utilitaire git-hg pour extraire et suivre une et le suivi d'un dépôt mercuriel.

Un ensemble de scripts pour vérifier et suivre un projet Mercrial [sic].

Il ne semble cependant pas fonctionner de manière bidirectionnelle (cf. gestionnaire de problèmes ).

1 votes

Il semble que quelqu'un d'autre l'ait déjà ajouté. Regardez cette fourche .

14 votes

Je suis l'auteur original de git-hg. Il s'agit simplement d'un ensemble d'enveloppes shell autour de fast-export que j'ai utilisé pour suivre un dépôt hg distant. Comme indiqué par Albert, quelqu'un a ajouté le support du push et je viens de fusionner ce fork aujourd'hui. Pour une raison quelconque, j'ai dû manquer les notifications par courriel de GitHub parce que j'ai eu deux demandes de pull ouvertes il y a quelques semaines que je n'ai jamais remarqué jusqu'à aujourd'hui.

1 votes

Comme je l'explique en détail ici la méthode utilisée par Git-Hg pour pousser vers Mercurial ne semble pas utilisable en pratique. J'en ai déjà parlé à Cosmin ; je poste simplement ce commentaire ici pour aider les autres qui finissent par trouver leur chemin vers ces outils par les mêmes chemins de recherche que moi.

19voto

Max Points 231

Il existe un autre projet pour réaliser cela : git-remote-hg. En fait, il y en a deux, un natif (voir https://github.com/msysgit/msysgit/wiki/Guide-to-git-remote-hg ) et un autre basé sur hg-git (voir https://github.com/rfk/git-remote-hg ). Le premier est beaucoup plus rapide que le second, mais il est encore incomplet et en cours de développement.

Il existe en fait des aides distantes git (comme on appelle ces outils) pour d'autres systèmes, soit déjà existantes, soit en cours de développement ; cela inclut le support de Subversion, CVS, bazaar, et même MediaWiki.

Le clonage d'un dépôt Mercurial via git se fait alors simplement comme suit :

git clone hg::https://hg.example.com/some-mercurial-repo

MISE À JOUR : Il y a maintenant un troisième fichier, également "natif", à savoir celui de Felipe qu'il mentionne dans sa réponse ici. Il semble qu'il pourrait bientôt faire partie du répertoire git 'contrib' : https://github.com/felipec/git-remote-hg Il fonctionne sans nécessiter de correctifs à git lui-même, bien que certains correctifs à git (en cours de révision) puissent être appliqués pour améliorer l'expérience utilisateur globale.

MISE À JOUR 2 : Et maintenant, il y a encore un autre concurrent, celui-ci étant en développement assez actif, et basé sur le code de Felipe : https://github.com/buchuki/gitifyhg -- Cela fonctionne assez bien pour moi jusqu'à présent, mais il y a encore quelques points faibles.

MISE À JOUR 3 : gitifyhg et git-remote-hg de Felipe ne sont actuellement pas activement maintenus. Pour le moment, j'ai fait une forme du code de Felipe avec quelques corrections, dont certaines pour le faire fonctionner avec les versions récentes de Mercurial. Vous pouvez l'obtenir à partir de https://github.com/fingolfin/git-remote-hg . Enfin, il y a encore un autre candidat récent, git-cinnabar Il s'agit d'une approche complètement différente en interne (bien que si vous ne vous souciez pas de cela, son utilisation est plus ou moins la même que pour les autres implémentations de git-remote-hg). Je ne l'ai pas encore essayé moi-même, mais vous pouvez le trouver à l'adresse suivante https://github.com/glandium/git-cinnabar

1 votes

À la conférence Pycon 2013, l'auteur de gitifyhg semblait assez confiant. Il dit que ce n'est pas testé sous Windows, donc je vais essayer maintenant.

0 votes

Gitifyhg est en fait un fork de git-remote-hg, et je ne pense pas que l'un ou l'autre nécessite hg-git (ils utilisent directement les modules python de Mercurial). L'équipe qui travaille sur gitifyhg semble être plus réactive aux rapports de bogues que le gars qui a développé git-remote-hg à l'origine, donc j'ai migré vers gitifyhg.

18voto

Tom Willis Points 3506

hg-git et de l'auteur Présentation de Pycon Je ne sais pas si vous les avez trouvés en cherchant sur Google, mais ils ont répondu à mes questions.

6 votes

Quelqu'un a une transcription de ceci ?

0 votes

Je n'en connais pas moi-même, mais je l'ai trouvé assez facile à suivre.

2 votes

Superbe présentation ! Informative et amusante à regarder. En fait, je ne l'avais pas vue avant, car j'ai tendance à éviter de regarder des vidéos en ligne. Malheureusement, je ne suis toujours pas satisfait de la réponse. Si la fonctionnalité est déjà là, alors pourquoi ne pas aller jusqu'au bout ? Je vais devoir essayer hggit, mais je devrais peut-être envoyer un courriel aux gars de Bitbucket...

8voto

Thomas Broyer Points 45499

Hg-git peut apparemment être utilisé pour travailler avec git localement, avec un repo mercuriel distant : http://traviscline.com/blog/2010/04/27/using-hg-git-to-work-in-git-and-push-to-hg/

Ne manquez pas non plus les commentaires.

0 votes

la solution du felipec est maintenant intégré dans Git, et fonctionne bien, il devrait donc être préféré.

5voto

felipec Points 3278

Quelqu'un a déjà mentionné deux git-remote-hg, mais en voici un nouveau :

Support des ponts dans git pour mercurial et bazaar

Il a plus de fonctionnalités et devrait fonctionner de manière plus fiable que celui de msysgit, mais le plus important est que vous n'avez pas besoin de dépendances ou d'une construction git personnalisée. Copiez simplement dans votre $PATH et c'est tout.

Il dispose de tests complets pour vérifier que la sortie est exactement la même que celle de hg-git, il devrait donc fonctionner au moins aussi bien.

0 votes

Comment git-remote-hg gérer le décalage d'impédance entre les branches hg et les branches git (voir ma réponse à la page stackoverflow.com/a/11223644/334451 pour plus de détails) ?

1 votes

git-remote-hg importe les branches nommées et les signets de Mercurial, puisque les signets sont les mêmes que les branches de Git, un signet 'foo' donne une branche 'foo' dans Git. Une branche nommée 'bar', en revanche, devient une branche 'branches/bar' dans Git. Si vous poussez quelque chose au dessus de cette branche, tous ces commits obtiennent le label 'bar', et finissent donc dans la branche nommée 'bar'. En outre, il existe un mode de compatibilité hg-git, dans lequel nous faisons exactement la même chose que hg-git et ajoutons un code supplémentaire à la fin d'un commit qui spécifie la branche nommée Mercurial. Ainsi, aucune information n'est perdue.

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