<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
     xmlns:content="http://purl.org/rss/1.0/modules/content/"
     xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
     xmlns:atom="http://www.w3.org/2005/Atom"
     xmlns:dc="http://purl.org/dc/elements/1.1/"
     xmlns:wfw="http://wellformedweb.org/CommentAPI/"
     >
  <channel>
    <title>#gitfr</title>
    <link>http://www.gitfr.net/blog</link>
    <description>Projet pour la promotion du bien et la destruction du mal</description>
    <pubDate>Sun, 15 Apr 2012 21:04:43 GMT</pubDate>
    <generator>Blogofile</generator>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>La différence entre Hg et Git</title>
      <link>http://www.gitfr.net/blog/2011/07/18/la-difference-entre-hg-et-git</link>
      <pubDate>Mon, 18 Jul 2011 00:40:00 CEST</pubDate>
      <category><![CDATA[git]]></category>
      <category><![CDATA[hg]]></category>
      <guid isPermaLink="true">http://www.gitfr.net/blog/2011/07/18/la-difference-entre-hg-et-git</guid>
      <description>La différence entre Hg et Git</description>
      <content:encoded><![CDATA[<p>J'aime beaucoup ce <a href="http://blog.daemon.com.au/blog-post/know-subversion-git-or-mercurial">billet</a>,
il résume parfaitement à mes yeux la différence majeure entre Hg et Git quand
on vient de SVN : il est possible d'utiliser Hg (Mercurial) comme un <em>SVN qui
marche</em>, ce n'est pas du tout le cas avec Git car très vite, on se retrouve à
faire des grosses bêtises si on n'a pas compris les concepts importants.</p>
<h2>Hg, un SVN qui marche</h2>
<p>Ce n'est pas une attaque contre Hg, bien au contraire, c'est une choix
réfléchi de se comporter comme tel :</p>
<ul>
<li>C'est un outil de gestion de source.</li>
<li>Chaque commit sait dans quelle branche il se trouve.</li>
<li>Les possibilités de manipulation des branches sont assez réduites quand
  on n'ajoute pas d'extensions.</li>
</ul>
<p>La volonté du fondateur de Mercurial est de toujours sacrifier les
fonctionnalités au profit d'une conception claire, là ou Linus Torvalds
avait en tête dés le départ un certain nombre de fonctionnalités. La vitesse
étant le seul objectif qui autorise à sacrifier des fonctionnalités.</p>
<p>Hg est un outil puissant, qui autorise ce que SVN ne permettait
pas (pour être précis, il le faisait tellement mal qu'on <strong>ne se permettait
pas</strong> de le faire) : une gestion plus fine des branches. Avec Hg, créer des
branches et <em>merger</em> ne pose plus de soucis particulier. Comme le dit 
l'article :</p>
<blockquote>
<p>For Hg, the instructor goes through the Hg primer with the student. The
student is then left to use Hg with the instructor watching. Every time
the student begins to think about branching or merging, the instructor hits
the student over the head with the bat. This provides a negative
reinforcement for the student's SVN branching and merging habits.</p>
</blockquote>
<p>Une fois assimilées la gestion des branches et la notion de distribué, on se
débrouille relativement bien. Je connais d'ailleurs peu d'utilisateurs
de Mercurial qui ont étudiés le DAG, ou les possiblités avancées des 
branches (rebase, cherry-pick...).</p>
<h2>Git, un outil de gestion de contenu</h2>
<p>C'est une notion importante à saisir, Git n'est <strong>pas</strong> un outil de gestion de
source (VCS). Comme avec n'importe quel outil de contenu, il est possible de
modifier ou de supprimer ce que l'on veut : Git permet de <strong>modifier
l'historique</strong>, ce qui n'est pas le cas d'un VCS, comme CVS, SVN ou Hg. De
ce postulat simple découle une autre philosophie, et donc une utilisation
sensiblement différente : une distinction entre <em>branche du DAG</em> et <em>branche
utilisateur</em>.</p>
<p>Une branche du <strong>DAG</strong> (<em>directed Acyclic Graph</em> ou <em>graphe orienté acyclique</em>)
est manipulée par Git et permet de suivre les modifications du code : qui est
le descendant de qui ? Avec ce graphe, il est simple pour un DVCS de savoir
quoi faire lors d'une opération comme une fusion (un merge). Mais chaque
branche est <strong>anonyme</strong>, elle ne porte pas de nom. Les noms de branches
sont dans un <strong>espace différent</strong>, distinct, qui permet de les manipuler
indifféremment du DAG. Ou inversement de manipuler le DAG sans toucher aux noms.
Cet espace utilisateur est appelé <strong>référence</strong>.</p>
<p><strong>Note</strong> : Je reviendrai la dessus dans un prochain billet, il est temps
maintenant de transformer la conférence #gitfr en billet.</p>
<p>Cette distinction est source de confusion, d'erreur et de déception. Mais c'est
ce qui rend Git si <strong>puissant</strong> !</p>
<p>C'est ce que dit la suite du billet :</p>
<blockquote>
<p>At the very beginning, the instructor bashes the student repeatedly over the
head with the bat until all brain cells containing any memory of SVN are
destroyed. The instructor then teaches the student the Git primer.</p>
</blockquote>
<p>J'aime beaucoup cette image :). Il ne faut surtout pas utiliser Git comme on
utilise SVN, ni de prêt ni de loin, il faut <strong>ré-apprendre</strong> ce qu'est le
contrôle de version. Je ne dit pas que cela est facile, c'est même la raison
première de la création de #gitfr.</p>
<p>Mais ce travail est valorisé au centuple une fois Git maitrisé, et vous ouvre
un champ des possibles inimaginable quand on vient de SVN...</p>]]></content:encoded>
    </item>
  </channel>
</rss>

