Contrôle de versions, on y trempe le bout du pied

Quand on mentionne les outils de contrôle de versions à un auteur — un auteur qui sait déjà ce que c’est, ce qui relève hélas encore de l’exception — il a tendance à imaginer un bidule complexe, un truc de geeks.

Il n’a pas tort. Même si Versions, l’outil de Apple, a beaucoup amélioré ça en le rendant simple et intuitif. Ou encore un outil en ligne comme draftin qui est juste superbe.

Malheureusement, il y a quelques petites choses qui peuvent gêner avec Versions :

  • Cela ne fonctionne qu’avec certaines applications, notamment pas avec TextMate.
  • On ne contrôle pas la façon dont les versions sont préservées
  • Les versions sont locales, liées à une machine. Impossible de gérer les versions d’un fichier modifié sur plusieurs machines.
  • Et, bien sûr, cela ne fonctionne que sur Mac.

Ou avec draftin :

  • C’est en ligne seulement (je suis souvent déconnecté), et il faut importer tous les fichiers que l’on veut suivre.
  • Le gestionnaire d’importation n’est pas à la hauteur : lent et très limité.
  • Il ne reconnait que quelques extensions (pas les .markdown, que j’utilise depuis des années, pas de pot). J’en ai parlé avec le dev, il est conscient que c’est un souci.

J’y reviendrai un de ces quatre, car je trouve ces deux outils absolument passionnants. En attendant, je voulais juste signaler à celles et ceux qui se poseraient la question que ce n’est pas sur eux que je compte pour garder des versions de mon travail.

J’utilise Mercurial — un outil (gratuit) de contrôle de versions pour les programmeurs, en ligne de commande donc : un truc de geek effrayant… encore plus pour ceux qui connaitraient des geeks et qui souviendraient de termes barbares qu’ils emploient, comme “branches”, “forks”, “merges”, “conflits”, etc.

Brrr.

Sauf que cette complexité n’est pas obligatoire.

Si elle ne disparaît pas complètement, on arrive à quelque chose qui n’est pas beaucoup plus pénible que l’outil de Apple. Ce sera nettement moins beau, et ça demandera quelques minutes pour le configurer, mais c’est tout.

En fait toutes les notions techniques, les branches, les merges, les forks, les bidules qui font chtong et les trucs qui font chbling sont complètement inutiles pour la plupart des auteurs. Un auteur travaille généralement seul sur son texte, sans jamais avoir besoin de créer des versions parallèles d’un même texte (forks) pour ensuite les fusionner en une seule version (merge).

Moi, j’en ai pas besoin. Je veux juste pouvoir remonter en arrière quand je réalise que je me suis planté, ou quand je veux retrouver une idée ou une formulation que j’ai supprimée d’un billet.

Mais je veux pouvoir le faire en écrivant dans l’application de mon choix — TextMate ou nvALT ou TextEdit ou etc. — sur Mac ou sur PC et même sur l’iPad. Et je veux que ça se fasse tout seul.

D’où Mercurial (ça marcherait aussi bien avec Git, son concurrent gratuit lui aussi). Pour vous donner une idée, voilà à quoi ressemble le “contrôle de version” du dossier qui contient tous les brouillons des articles du blog :

Versions 001
Mon Mac est en anglais, ça devrait marcher en français chez vous 😉

Une liste datée, une seule branche (une seule ligne verticale sur le côté gauche). Cette liste est créée automatiquement : toutes les 10′, un script que j’ai créé, un truc tout bête, vérifie le dossier en question et exécute les commandes Mercurial : si un fichier a été ajouté, modifié ou supprimé, une version est créée, sinon il ne se passe rien. Un autre script me permet de créer une version “manuelle”, mais je ne l’utilise presque jamais.

Versions 004
La même liste, un peu plus tard. La ligne en haut de la liste, “uncommited changes”, indique que les dernières modifications n’ont pas encore été enregistrées par Mercurial (commited, en anglais).

Pour afficher cette liste versions, je ne passe pas par la ligne de commande habituelle, mais par SourceTree — une app gratuite, il y en a d’autres — qui me permet de voir ça de façon graphique, et aussi de cliquer sur chaque version pour afficher (1) la liste des fichiers modifiés (un seul ici, le brouillon de l’article que vous lisez) et, si je clique dessus, un aperçu des modifications dans ce fichier (2), par rapport à sa version précédente (on pourrait comparer d’autres versions, y a pas de limite).

Mais il y a mieux pour afficher toutes les différences (les diff, en langage geek), en passant par une application dédiée. Ici, j’utilise Kaleidoscope (payant, cher. Il en existe de gratuites) :

Versions 03

Les différences sont marquées par des couleurs. C’est très confortable — même si ça pourrait l’être davantage.

Alors, oui c’est moins beau que l’outil de Apple (et tellement moins beau que draftin, qui est superbe), mais ça offre quelques avantages qui m’intéressent en tant qu’auteur :

  • Ça marche avec tous les fichiers. Tout spécialement avec les fichiers TXT (Markdown) que j’utilise pour bloguer — et peu importe leur extension.
  • Je peux utiliser l’application de mon choix — TextMate, tu veux m’épouser ? — pour modifier mes fichiers.
  • Ça marche même sans Internet.
  • Ça marche même si on écrit à plusieurs (me reste plus qu’à convaincre @urbanbike de s’y mettre, c’est pas gagné ;)).
  • Ça marche même si on travaille sur plusieurs machines (j’y reviendrai éventuellement plus en détail, car il y a plusieurs possibilités) : les versions sont regroupées en une liste unique. Top.
  • Ça ne prend pas de place : seuls les changements sont enregistrés, pas tout le fichier chaque fois.
  • Les versions sont en réalité cachées dans le dossier surveillé : c’est donc 100% portable et facile à sauvegarder. Tandis qu’avec Versions de Apple on perd l’historique des versions si on réinstalle un Mac ou si on déplace un fichier (je crois aussi si on le renomme, pas vérifié).
  • Même si je modifie un fichier sur iPad, des versions seront créées.
  • Je peux utiliser Mercurial sur Mac mais aussi sur Windows ou GNU/Linux.
  • Vu que je passe par Dropbox, même quand je travaille sur iPad, Mercurial, qui est allumé sur un Mac, surveille ce dossier dans la Dropbox crée automatiquement des versions.
  • Les versions sont préservées aussi longtemps que je le souhaite.
  • Avec un service en ligne (gratuit ou payant, selon l’offre) comme BitBucket, je dispose en plus d’une sauvegarde à distance sécurisée de mes fichiers (et toutes les versions), à laquelle je peux accéder aussi avec un simple navigateur.

Bref, c’était donc un aperçu-du-contrôle-de-version-qu’est-pas-si-compliqué-que-ça-et-qui-marche-bien.

Tweetez, si le sujet vous intéresse et si vous voulez en savoir plus 😉