• [^] # Re: Mercurial

    Posté par (site web personnel) . En réponse au journal Git a fêté ses 10 ans hier .... Évalué à 5.

    Hormis github, qui est un argument tout à fait valable, je ne vais aucun avantage à git comparé à mercurial.

    En faisant abstraction de son horrible UI, Git permet d'être plus souple au quotidien : quand je fork un dépôt Git pour y contribuer, je peux me permettre de retravailler l'historique de ma branche comme je le souhaite sur mon dépôt perso (y'a peu de chance que quelqu'un l'ait forké à son tour donc je me permet de tout péter à coup de git rebase et git push -f avant de faire la pull request sur le projet upstream). Simple et rapide pour moi dans le cadre des petites contributions, et historique lisible pour ceux qui vont faire la revue de code avant un éventuel merge.

    Et ? C'est pareil avec Mercurial. Je trouve même que c'est bien plus simple qu'avec Git. Avec mercurial, tu update (checkout) le commit qui t’intéresse, tu commit --amend, puis en utilisant evolve, tous les autres commit sont rebasés par dessus.

    http://mercurial.selenic.com/wiki/ChangesetEvolution

    Tu peux toujours faire du reordonancement et de la suppression avec histedit (qui est l'équivalent à quelques détails de rebase -i).

    La dessus, tu as le système de phase qui t’évite de rebaser des commits publique, donc qui t'evites de te retrouver par erreur après quelques heures de travail avec un dépôt dans un état qui va te prendre quelques heures à rétablir.

    De plus, mercurial (avec evolve) garde l'historique des manipulation d'historique. Ainsi tu peux voir quel est le commit à l'origine d'un amend, ou d'un rebase. Git ne sait pas faire cela et tu dois chercher dans le reflog à la main, ce qui peut être laborieux.

    Hormis quelques détails, comme l'absence d'auto !fixup ou !squash dans Mercurial et que l'ajout interactif d'éléments dans un commit (i.e, l’équivalent de git add -p) est un peu moins élaboré (il existe crecord, mais je n'ai jamais accroché), je suis très souvent frustré par les limitations et le manque de flexibilité de git comparé à mercurial.

    Pour finir, Facebook a dernièrement annoncé qu'il passaient de git à mercurial pour des raison de flexibilité et de performance https://www.youtube.com/watch?v=X0VH78ye4yY et google annonce aussi collaborer avec facebook pour l'évolution de Mercurial.