{"id":14185,"date":"2013-05-07T22:45:06","date_gmt":"2013-05-07T20:45:06","guid":{"rendered":"http:\/\/davidbosman.fr\/blog\/?p=14185"},"modified":"2013-05-17T14:10:32","modified_gmt":"2013-05-17T12:10:32","slug":"controle-de-version-on-y-trempe-le-bout-du-pied","status":"publish","type":"post","link":"https:\/\/www.davidbosman.fr\/blog\/2013\/05\/07\/controle-de-version-on-y-trempe-le-bout-du-pied\/","title":{"rendered":"Contr\u00f4le de versions, on y trempe le bout du pied"},"content":{"rendered":"<p>Quand on mentionne les outils de contr\u00f4le de versions \u00e0 un auteur \u2014 un auteur qui sait d\u00e9j\u00e0 ce que c&#8217;est, ce qui rel\u00e8ve h\u00e9las encore de l&#8217;exception \u2014 il a tendance \u00e0 imaginer un bidule complexe, un truc de geeks.<\/p>\n\n<p>Il n&#8217;a pas tort. M\u00eame si Versions, l&#8217;outil de Apple, a beaucoup am\u00e9lior\u00e9 \u00e7a en le rendant simple et intuitif. Ou encore un outil en ligne comme <a href=\"https:\/\/draftin.com\">draftin<\/a> qui est juste <em>superbe<\/em>.<\/p>\n\n<p>Malheureusement, il y a quelques petites choses qui peuvent g\u00eaner avec Versions :<\/p>\n\n<ul>\n<li>Cela ne fonctionne qu&#8217;avec certaines applications, notamment <em>pas<\/em> avec TextMate.<\/li>\n<li>On ne contr\u00f4le pas la fa\u00e7on dont les versions sont pr\u00e9serv\u00e9es<\/li>\n<li>Les versions sont locales, li\u00e9es \u00e0 une machine. Impossible de g\u00e9rer les  versions d&#8217;un fichier modifi\u00e9 sur plusieurs machines.<\/li>\n<li>Et, bien s\u00fbr, cela ne fonctionne que sur Mac.<\/li>\n<\/ul>\n\n<p>Ou avec draftin :<\/p>\n\n<ul>\n<li>C&#8217;est en ligne seulement (je suis souvent d\u00e9connect\u00e9), et il faut importer tous les fichiers que l&#8217;on veut suivre.<\/li>\n<li>Le gestionnaire d&#8217;importation n&#8217;est pas \u00e0 la hauteur : lent et tr\u00e8s limit\u00e9.<\/li>\n<li>Il ne reconnait que quelques extensions (pas les .markdown, que j&#8217;utilise depuis des ann\u00e9es, pas de pot). J&#8217;en ai parl\u00e9 avec le dev, il est conscient que c&#8217;est un souci.<\/li>\n<\/ul>\n\n<p>J&#8217;y reviendrai un de ces quatre, car je trouve ces deux outils absolument passionnants. En attendant, je voulais juste signaler \u00e0 celles et ceux qui se poseraient la question que ce n&#8217;est pas sur eux que je compte pour garder des versions de mon travail.<\/p>\n\n<p>J&#8217;utilise <a href=\"http:\/\/mercurial.selenic.com\">Mercurial<\/a> \u2014 un outil (gratuit) de contr\u00f4le de versions pour les programmeurs, en ligne de commande donc : un truc de geek effrayant&#8230; encore plus pour ceux qui connaitraient des geeks et qui souviendraient de termes barbares qu&#8217;ils emploient, comme &#8220;branches&#8221;, &#8220;forks&#8221;, &#8220;merges&#8221;, &#8220;conflits&#8221;, etc.<\/p>\n\n<p><em>Brrr.<\/em><\/p>\n\n<p>Sauf que cette complexit\u00e9 n&#8217;est pas obligatoire.<!--more--><\/p>\n\n<p>Si elle ne dispara\u00eet pas compl\u00e8tement, on arrive \u00e0 quelque chose qui n&#8217;est pas beaucoup plus p\u00e9nible que l&#8217;outil de Apple. Ce sera nettement moins beau, et \u00e7a demandera quelques minutes pour le configurer, mais c&#8217;est tout. <\/p>\n\n<p>En fait toutes les notions techniques, les branches, les merges, les forks, les bidules qui font <em>chtong<\/em> et les trucs qui font <em>chbling<\/em> sont compl\u00e8tement inutiles pour la plupart des auteurs. Un auteur travaille g\u00e9n\u00e9ralement seul sur son texte, sans jamais avoir besoin de cr\u00e9er des versions parall\u00e8les d&#8217;un m\u00eame texte (forks) pour ensuite les fusionner en une seule version (merge).<\/p>\n\n<p>Moi, j&#8217;en ai pas besoin. Je veux juste pouvoir remonter en arri\u00e8re quand je r\u00e9alise que je me suis plant\u00e9, ou quand je veux retrouver une id\u00e9e  ou une formulation que j&#8217;ai supprim\u00e9e d&#8217;un billet.<\/p>\n\n<p>Mais je veux pouvoir le faire en \u00e9crivant <em>dans l&#8217;application de mon choix<\/em> \u2014 TextMate ou nvALT ou TextEdit ou etc. \u2014 sur Mac ou sur PC et m\u00eame sur l&#8217;iPad. Et je veux que \u00e7a se fasse tout seul.<\/p>\n\n<p>D&#8217;o\u00f9 Mercurial (\u00e7a marcherait aussi bien avec Git, son concurrent gratuit lui aussi). Pour vous donner une id\u00e9e, voil\u00e0 \u00e0 quoi ressemble le &#8220;contr\u00f4le de version&#8221; du dossier qui contient tous les brouillons des articles du blog :<\/p>\n\n<p><img decoding=\"async\" src=\"http:\/\/davidbosman.fr\/blog\/wp-content\/uploads\/2013\/05\/versions_001.png\" alt=\"Versions 001\" \/><br \/>\n<em>Mon Mac est en anglais, \u00e7a devrait marcher en fran\u00e7ais chez vous \ud83d\ude09<\/em><\/p>\n\n<p>Une liste dat\u00e9e, une seule branche (une seule ligne verticale sur le c\u00f4t\u00e9 gauche). Cette liste est cr\u00e9\u00e9e automatiquement : toutes les 10&#8242;, un script que j&#8217;ai cr\u00e9\u00e9, un truc tout b\u00eate, v\u00e9rifie le dossier en question et ex\u00e9cute les commandes Mercurial : si un fichier a \u00e9t\u00e9 ajout\u00e9, modifi\u00e9 ou supprim\u00e9, une version est cr\u00e9\u00e9e, sinon il ne se passe rien. Un autre script me permet de cr\u00e9er une version &#8220;manuelle&#8221;, mais je ne l&#8217;utilise presque jamais.<\/p>\n\n<p><img decoding=\"async\" src=\"http:\/\/davidbosman.fr\/blog\/wp-content\/uploads\/2013\/05\/versions_004.png\" alt=\"Versions 004\" \/><br \/>\n<em>La m\u00eame liste, un peu plus tard. La ligne en haut de la liste, &#8220;uncommited changes&#8221;, indique que les derni\u00e8res modifications n&#8217;ont pas encore \u00e9t\u00e9 enregistr\u00e9es par Mercurial (commited, en anglais).<\/em><\/p>\n\n<p>Pour afficher cette liste versions, je ne passe pas par la ligne de commande habituelle, mais par <a href=\"http:\/\/sourcetreeapp.com\">SourceTree<\/a>  \u2014 une app gratuite, il y en a d&#8217;autres \u2014 qui me permet de voir \u00e7a de fa\u00e7on graphique, et aussi de cliquer sur chaque version pour afficher (<strong>1<\/strong>) la liste des fichiers modifi\u00e9s (un seul ici, le brouillon de l&#8217;article que vous lisez) et, si je clique dessus, un aper\u00e7u des modifications dans ce fichier (<strong>2<\/strong>), par rapport \u00e0 sa version pr\u00e9c\u00e9dente (on pourrait comparer d&#8217;autres versions, y a pas de limite).<\/p>\n\n<p>Mais il y a mieux pour afficher toutes les diff\u00e9rences (les <em>diff<\/em>, en langage geek), en passant par une application d\u00e9di\u00e9e. Ici, j&#8217;utilise <a href=\"http:\/\/www.kaleidoscopeapp.com\">Kaleidoscope<\/a> (payant, cher. Il en existe de gratuites) :<\/p>\n\n<p><img decoding=\"async\" src=\"http:\/\/davidbosman.fr\/blog\/wp-content\/uploads\/2013\/05\/versions_03.png\" alt=\"Versions 03\" \/><\/p>\n\n<p>Les diff\u00e9rences sont marqu\u00e9es par des couleurs. C&#8217;est tr\u00e8s confortable \u2014 m\u00eame si \u00e7a pourrait l&#8217;\u00eatre davantage.<\/p>\n\n<div align=\"center\"><img decoding=\"async\" src=\"http:\/\/davidbosman.fr\/images\/zen.png\" alt=\"\" zen=\"\" style=\"border: 0px none ;\"><\/div>\n\n<p>Alors, oui c&#8217;est moins beau que l&#8217;outil de Apple (et tellement moins beau que draftin, qui est superbe), mais \u00e7a offre quelques avantages qui m&#8217;int\u00e9ressent en tant qu&#8217;auteur :<\/p>\n\n<ul>\n<li>\u00c7a marche avec tous les fichiers. Tout sp\u00e9cialement avec les fichiers TXT (Markdown) que j&#8217;utilise pour bloguer \u2014 et peu importe leur extension.<\/li>\n<li>Je peux utiliser l&#8217;application de mon choix \u2014 TextMate, tu veux m&#8217;\u00e9pouser ? \u2014 pour modifier mes fichiers.<\/li>\n<li>\u00c7a marche m\u00eame sans Internet.<\/li>\n<li>\u00c7a marche m\u00eame si on \u00e9crit \u00e0 plusieurs (me reste plus qu&#8217;\u00e0 convaincre <a href=\"http:\/\/urbanbike.com\">@urbanbike<\/a> de s&#8217;y mettre, c&#8217;est pas gagn\u00e9 ;)).<\/li>\n<li>\u00c7a marche m\u00eame si on travaille sur plusieurs machines (j&#8217;y reviendrai \u00e9ventuellement plus en d\u00e9tail, car il y a plusieurs possibilit\u00e9s) : les versions sont regroup\u00e9es en une liste unique. Top.<\/li>\n<li>\u00c7a ne prend pas de place : seuls les changements sont enregistr\u00e9s, pas tout le fichier chaque fois.<\/li>\n<li>Les versions sont en r\u00e9alit\u00e9 cach\u00e9es dans le dossier surveill\u00e9 : c&#8217;est donc 100% portable <em>et<\/em> facile \u00e0 sauvegarder. Tandis qu&#8217;avec Versions de Apple on perd l&#8217;historique des versions si on r\u00e9installe un Mac ou si on d\u00e9place un fichier (je crois aussi si on le renomme, pas v\u00e9rifi\u00e9).<\/li>\n<li>M\u00eame si je modifie un fichier sur iPad, des versions seront cr\u00e9\u00e9es. <\/li>\n<li>Je peux utiliser Mercurial sur Mac mais aussi sur Windows ou GNU\/Linux. <\/li>\n<li>Vu que je passe par Dropbox, m\u00eame quand je travaille sur iPad, Mercurial, qui est allum\u00e9 sur un Mac, surveille ce dossier dans la Dropbox cr\u00e9e automatiquement des versions.<\/li>\n<li>Les versions sont pr\u00e9serv\u00e9es aussi longtemps que je le souhaite.<\/li>\n<li>Avec un service en ligne (gratuit ou payant, selon l&#8217;offre) comme <a href=\"https:\/\/bitbucket.org\">BitBucket<\/a>, je dispose en plus d&#8217;une sauvegarde \u00e0 distance s\u00e9curis\u00e9e de mes fichiers (et toutes les versions), \u00e0 laquelle je peux acc\u00e9der aussi avec un simple navigateur.<\/li>\n<\/ul>\n\n<p>Bref, c&#8217;\u00e9tait donc un aper\u00e7u-du-contr\u00f4le-de-version-qu&#8217;est-pas-si-compliqu\u00e9-que-\u00e7a-et-qui-marche-bien.<\/p>\n\n<p>Tweetez, si le sujet vous int\u00e9resse et si vous voulez en savoir plus \ud83d\ude09<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Quand on mentionne les outils de contr\u00f4le de versions \u00e0 un auteur \u2014 un auteur qui sait d\u00e9j\u00e0 ce que c&#8217;est, ce qui rel\u00e8ve h\u00e9las encore de l&#8217;exception \u2014 il a tendance \u00e0 imaginer un bidule complexe, un truc de &hellip; <a href=\"https:\/\/www.davidbosman.fr\/blog\/2013\/05\/07\/controle-de-version-on-y-trempe-le-bout-du-pied\/\">Read more &rarr;<\/a><\/p>","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[21,38,52,51],"class_list":["post-14185","post","type-post","status-publish","format-standard","hentry","category-general","tag-ecriture","tag-markdown","tag-scripts","tag-txt"],"_links":{"self":[{"href":"https:\/\/www.davidbosman.fr\/blog\/wp-json\/wp\/v2\/posts\/14185","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.davidbosman.fr\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.davidbosman.fr\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.davidbosman.fr\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.davidbosman.fr\/blog\/wp-json\/wp\/v2\/comments?post=14185"}],"version-history":[{"count":5,"href":"https:\/\/www.davidbosman.fr\/blog\/wp-json\/wp\/v2\/posts\/14185\/revisions"}],"predecessor-version":[{"id":14272,"href":"https:\/\/www.davidbosman.fr\/blog\/wp-json\/wp\/v2\/posts\/14185\/revisions\/14272"}],"wp:attachment":[{"href":"https:\/\/www.davidbosman.fr\/blog\/wp-json\/wp\/v2\/media?parent=14185"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.davidbosman.fr\/blog\/wp-json\/wp\/v2\/categories?post=14185"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.davidbosman.fr\/blog\/wp-json\/wp\/v2\/tags?post=14185"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}