<?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:42 GMT</pubDate>
    <generator>Blogofile</generator>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>La commande commit</title>
      <link>http://www.gitfr.net/blog/2011/04/23/la-commande-commit</link>
      <pubDate>Sat, 23 Apr 2011 02:17:00 CEST</pubDate>
      <category><![CDATA[git-commit]]></category>
      <category><![CDATA[git]]></category>
      <guid isPermaLink="true">http://www.gitfr.net/blog/2011/04/23/la-commande-commit</guid>
      <description>La commande commit</description>
      <content:encoded><![CDATA[<p>Maintenant que nous savons construire notre commit temporaire (l'index), nous allons voir comment le transformer en commit définitif. Il est intéressant de noter que vous pouvez <strong>shinter</strong> la commande <code>add</code> de plusieurs façons :</p>
<ul>
<li>
<p>En désignant le(s) fichier(s) directement : <code>git commit monfichier</code></p>
</li>
<li>
<p>En mode interactif (en fait appelle son équivalent dans <code>git add</code>) : <code>git commit -i</code></p>
</li>
<li>
<p>En prenant tous les fichiers déja tracés, avec l'option <code>git commit -a</code></p>
</li>
</ul>
<p>Comme j'ai pu le dire dans mes présentations, je vous conseille fortement d'utiliser l'index, même si cela peut sembler inintéressant ou futile au premier abord (vous allez surement pensez cela au début).</p>
<p>La commande <code>commit</code> dispose de plusieurs options pour vous simplfier la vie. Comme spécifier l'auteur (<code>--author=</code>), la date (<code>--date=</code>), le contenu d'un fichier comme message de commit (<code>-F</code>), signer le message (<code>-s</code>), spécifier le message en ligne de commande (<code>-m</code>)... Bref, rien de bien compliqué et je vous encourage, comme d'habitude, à lire le manuel (<code>man git commit</code>). Mais je vous propose néanmoins de nous attarder sur 2 options fort intéressantes.</p>
<h2>Commencer par un commit vide</h2>
<p>Quand je créé un dépôt, je commence toujours pas un commit vide (option <code>--allow-empty</code>) pour avoir  un commit de <strong>référence</strong>. A quoi cela peut il servir ?</p>
<ul>
<li>
<p>Si je travaille directement dans <em>master</em>, je peux revoir l'ensemble des commits (par un <code>rebase -i</code>, article à venir), ce qui n'est pas possible si mon premier commit contient des données.</p>
</li>
<li>
<p>Si je travaill dans une branche, je peux faire un merge (autre article à venir) en modélisant le merge dans master. Ce qui n'est pas possible si je n'ai pas de commit uniquement dans master.</p>
</li>
</ul>
<p>Je trouve que c'est une très bonne pratique que je vous conseille. Pour ma part, j'appelle  toujours ce commit «Initial commit».</p>
<h2>Modifier son dernier commit</h2>
<p>Malgré l'index, il m'arrive souvent de me rendre compte d'une erreur aprés coup. C'est la qu'intervient l'option <code>--amend</code>, qui écrase le dernier commit par celui que vous êtes en train de faire. Vraiment pratique ! On voici ici tout l'intérêt de ne <strong>pas</strong> pousser en permanence ses commits sur le serveur, mais d'attendre d'avoir fini le travail. Ce qui permet de pousser un ensemble de commits cohérents.</p>
<h2>De l'art du bon message</h2>
<p>Un petit mot pour rappeler l'importance de bien choisir son message de commit. Git possède une convention : la 1ere ligne est le résumé, suivi d'un saut de ligne, puis du contenu plus exhaustif du commit. Au travail nous avons une autre convention :</p>
<ul>
<li>Chaque ligne commence par le type de modification : new, fix, chg</li>
<li>Le signe :</li>
<li>Puis la cible du message : usr (utilisateur), dev (développeur), pkg (packageur)</li>
<li>Le signe :</li>
<li>Et enfin le message</li>
</ul>
<p>Un exemple :</p>
<blockquote>
<p>chg: pkg: remove sact.nevrax.skin dependency</p>
</blockquote>
<p>Et nous avons autant de ligne que nécessaire, ce qui permet de voir rapidement si notre commit est <strong>unitaire</strong> : si des lignes n'ont rien à voir entre elles, on le voit facilement. Cela nous pousse dans cette bonne pratique. Nous ne suivons donc pas la convention Git, mais cela est adapté à nos besoins (rapidité d'écriture, simplicité de relecture, commit unitaire) et que nous tous dans la même pièce, avec <em>daily meeting</em> et revue de code. Sur un projet Libre, il peut être intéressant d'avoir un descriptif long du commit.</p>
<p>De plus, un outil transforme automatiquement les messages en changelog (un exemple <a href="http://pypi.python.org/pypi/sact.epoch/1.0.1">ici</a>, ce qui est bien utile.</p>]]></content:encoded>
    </item>
  </channel>
</rss>

