Vous savez que chaque rue a un nom ?

Bien ce n’est pas le cas au Japon. Ils donnent des numéros aux blocs (番地, banshi) entre les rues, et seulement les rues importantes portent un nom.

Il y a une différence similaire entre Subversion et Mercurial.

Subversion raisonne en terme de révisions. Une révision est la représentation d’un système de fichiers à un point dans l’histoire.
Dans Mercurial , on pense en changeset . Un changeset est une liste des modifications entre une révision  et la révision suivante.

Six, la moitié d’une douzaine: quelle est la différence ?

La voici. Imaginez que vous et moi ,nous travaillons sur du code et nous créons une branche, nous avons chacun une copie locale nous faisons plein de modifications de ce code séparément, donc il a divergé.

Quand on fusionne, Subversion regarde aux deux révisions – mon code modifié, et votre code modifié- et il essaye de deviner comment le regrouper ensemble  dans un gros bordel. Ca produit généralement des conflits de modification qui ne sont pas réellement des vrais conflits, simplement des endroits où Subversion a échoué de deviner ce qu’on a fait.

Au contraire , pendant que nous travaillions séparément dans Mercurial, Mercurial conserver une série de changesets. Et quand on fusionne le tout , Mercurial a plus d’information: il sait ce que chacun de nous a modifié et peut re-appliquer ces modifications, plutôt que de regarder au résultat final et essayer de deviner comment faire.

Par exemple si je change un peu une fonction, et la déplace ailleurs, Subversion ne se souvient pas de ces étapes, donc au moment de fusionner, il va penser qu’une nouvelle fonction est apparue de nulle part. Alors que Mercurial va se rappeler de ces choses séparément : fonction changée, fonction déplacée. Si vous avez modifié cette fonction par morceau, il y a plus de chance que Mercurial fusionne correctement nos modifications.

Comme Mercurial raisonne en changeset, on peut obtenir des choses intéressantes. Vous pouvez les exporter à un ami de l’équipe, au lieu d’exporter vers le dépôt central et d’en affecter toute l’équipe.

Si tout ça est déroutant, ne vous en faites pas – à la fin du tutorial vous allez y voir plus clair. Ce qui est important à retenir : Mercurial pense en terme « changesets » au lieu de « révisions » la fusion de code est meilleur que sous Subversion .

Ca veut dire qu’on peut faire des branches quand on le souhaite parce que la fusion se fera sans peine.

Vous voulez entendre une blague ? Chaque équipe Subversion que j’ai rencontré m’a raconté des variations de la même histoire. Cette histoire est si répandu que je la nomme   » Histoire Subversion numéro 1″. L’histoire : à un moment, ils ont créé une branche, pour que la version en cours de livraison aux clients soit isolée de la version que les développeurs  bidouillent. Chaque équipe m’a raconté qu’ils l’ont fait et ça marche jusqu’à qu’ils fusionnent le code, et c’est devenu un cauchemar. Ce qui devait prendre 5 minutes s’est terminé avec six développeurs autour d’un poste pendant deux semaines essayant de ré-appliquer chaque résolution de bug du build stable au build de développement. Presque chaque équipe s’est juré « plus jamais » de branches. Maintenant chaque nouvelle fonctionnalité est un gros bloc de #ifdef. Comme ça ils peuvent travailler sur un seul tronc commun, pendant que les clients ne voient jamais le nouveau code jusqu’à ce qu’il soit débogué, franchement c’est ridicule.

Garder le code stable de celui en  développement est justement ce que doit vous laisser faire un outil de contrôle de version

Quand vous passerez à Mercurial, vous n’allez peut-être pas le remarquer, mais faut pas avoir peur de créer des branches.

Ca veut dire que vous pouvez avoir des dépôts par équipe, où une petite équipe collaborent sur une nouvelle fonctionnalité, quand ils ont fini, ils le fusionnent dans le dépôt principal de développement, et ça marche !

Ca veut dire que vous pouvez expérimenter dans des dépôts séparés, si ils fonctionnent, vous les fusionner dans le dépôt central, sinon vous pouvez les abandonner. Et ça marche !

traduction de http://hginit.com/00.html


Publicités