Non, il ne s’agit pas du dernier opus du célèbre Worms… Bien que j’ai mis mon bandeau autour du front et sois prèt à lancer un Kamikaziiiii rageur !…
Il s’agit du retour d’une tranche de vie, que je pourrais résumer ainsi :
Ce que j’attend de mon gestionnaire de versions c’est qu’il soit comme une boite à bijoux, et non pas un labyrinthe dissimulant le Minotaure…

J’avais déjà fait 2 posts sur Git :
… D’ailleurs merci pour vos retours !
Ce matin, je suis en train de travailler sur un de nos projets iPhone : les sources sont sur Git, pour faire plaisir à Stephane (;o) et aussi pour me forcer à rentrer dedans…
Il est 11h17 : je change un champ depuis le studio studio graphique (« je mets l’attribut Tag à 0 dans InterfaceBuilder ») et je relance l’application. Là j’ai une erreur de compile me disant que les tag ne sont pas cohérents… Oups, j’ai glissé : du coup j’ouvre le fichier en question (le .xib)… Mais plus moyen de l’ouvrir : cela fait planter mon IDE (XCode) !
Ouaouh !… Trop malin que je suis, je décide d’ouvrir le fichier incriminé en mode texte (« Y en a la d’ans ! »)… Et je tombe sur un fichier XML de 836 lignes contenant principalement des ID et autres nombres ésotériques… Et là, perdu au milieu de ce bruit, il y a le nombre qui me pose problème ;(
Décidément trop malin que je suis, j’ai alors l’idée de génie : « No problemo ! Je vais utiliser un outil trop puissant, *ET FAIT POUR CELA* : mon gestionnaire de versions ! »
En effet, à quoi sert un gestionnaire de versions ?!… Quelle est la vocation première du gestionnaire de versions ?!… Pouvoir faire un diff ! Sinon la méthode qu’on utilisait avant les années 2000 suffisait largement : faire un ZIP à chaque version, le mettre dans un coin et en cas de problème je le ressorts !
« Mais non, le gestionnaire de version sert aussi à travailler en équipe, faire des merges, voire résoudre des conflits ! »
… Ok, et tu fais quoi quand tu résous un conflit ?… Tu fais un diff !
CQFD.
Je cherche donc à faire un diff avec Git… Et c’est là que les problèmes commencent…
Je me rappelle d’une commande « git diff » que je m’empresse de taper dans mon terminal, me croyant vraiment trop malin (bien que ma confiance en moi ait quelque peu commencé à s’ébranler…). Et là mon terminal crache le diff d’un fichier XML de 836 lignes, tout en monochrome… Mais il a la gentillesse de me mettre des p’tits « + » en début de ligne pour attirer mon attention sur certaines parties… Trop cool 😉
N’ayant pas été le meilleur copain de Néo à l’école, je n’ai pas appris à lire la Matrice… Je décide donc, dans un ultime sursaut d’ingéniosité, de me trouver un client pour MacOS… L’Internet Mondial, et Google son meilleur ami, semblent me conseiller GitX… Connaissant SvnX, je suis perplexe mais me sens obligé…
J’installe donc le GitX puis le lance… Et là, pas d’entrée de menu « Repositories » ou « Working copy »… Ni même d’entrée « diff »… Pas même l’aide semble avoir entendu parlé du key word « diff »… Alors que la démonstration scientifique rigoureuse ci-dessus à clairement démontré que c’était la vocation première d’un gestionnaire de version… Quand bien même que je vous accorderais dans un délire passagé que ce n’est pas la première, j’espère que vous aurez la politesse de m’accorder en retour que cela reste une fonctionnalité importante !
Le seul menu qui semble faire quelque chose est le menu « File > Open »… Il veut peut être que j’ouvre ma working copy ?!… Essayons… Ah oui, c’était bien cela… La fenêtre du bas semble être l’arborescence des fichiers… Je retrouve le fichier concerné… Toujours pas de commande « diff » à l’horizon… Que me dit le menu contextuel du bouton droit ?… Seule chose interessante le « Show history of file »… Ok, essayons : je brûle peut-être ?!… Ok, maintenant comment je fais pour faire le diff avec l’une des deux versions commitées et celle en locale ?!… Mais c’est un enfer… Les noms d’oiseaux commencent à fuser…
Bon, retour à mon meilleur ami, l’Internet Mondial : « how to view diff with gitx »… Et là, devinez quoi ?!… La première réponse est de nouveau une ligne de commande ;)…
git diff v0.5 v0.6 | gitx
C’est pas trop fort d’utiliser une ligne de commande pour lancer un client qui a pour vocation de s’affranchir de la ligne de commande ;))
Suis trop enervé pour resister…
Je copie cela dans mon shell… Et j’en arrive à me demander : ok, par quoi je remplace v0.5 et v0.6 ???… Mais quelle est la version de mes fichiers ?… Comment la trouver dans mon client GitX ?…
25 minutes se sont écoulées… Il est l’heure d’aller manger avec Stéphane, laissant cette bataille à la machine !
Quoi ressortir de positif à celà ?
Quelles conclusions en tirer ?…
Je reste persuadé que la principale vocation d’un gestionnaire de versions est de répondre présent quand on a un soucis avec nos sources : Pouvoir faire simplement un diff entre deux versions… Git ne serait donc pas un gestionnaire de versions ?… 😉
En tant qu’agiliste, je m’efforce de faire des logiciels qui répondent au besoin du client, et pour cela le logiciel doit s’adapter à lui, et non pas l’inverse… Ici c’est le contraire : ce n’est pas Git qui se plie à moi, mais c’est moi qui suit plié par Git… Il fait même de l’origami avec mes nerfs ! Si je n’apprend pas les arcanes de Git je n’ai aucune chance de pouvoir l’utiliser simplement pour les cas nominaux d’utilisation…
Je veux bien faire l’effort d’apprendre Git maintenant, mais il faudra que je refasse la même chose dans 5 ans avec son successeur, et rien que d’y penser, j’ai des frissons dans le dos en me demandant ce que la communauté va bien pouvoir nous pondre !…
Cela fini de me convaincre sur les outils en ligne de commande. Mon avis, maintenant bien tranché, sur ceux qui ne jurent que par les outils en ligne de commande, est le suivant :
- Soit se sont de pur geek – techos, et ce n’est pas péjoratif car je me revendique moi même de cette catégorie, mais pas sur ce que je considère être de la tuyauterie, de l’administratif, de la logistique.
- Soit ils n’ont pas confiance en l’outil graphique, et cela se comprend
- Soit l’outil ne répond pas assez vite, et là je comprends aussi…
Mais je ne suis pas payé par mon client pour passer du temps à maitriser mon environnement de développement en ligne de commande. Il me paye pour lui apporter de la valeur ajouté. Aussi, le gestionnaire de versions est fondamental dans mon métier, mais je ne devrais pas avoir à subir un apprentissage couteux pour mettre en oeuvre les cas d’utilisation standards. Clic-droit sur le bon fichier et diff : à lui de gérer le fait qu’on soit passé de CVS, à SVN, à Git puis à VCS2020…
D’où ma métaphore d’introduction :
Ce que j’attends de mon gestionnaire de versions c’est qu’il soit comme une boite à bijoux, et non pas un labyrinthe dissimulant le Minotaure…
Mes bijoux, ce qui fait ma valeur et pour quoi je suis payé, se sont mes sources. Pour les déposer, je cherche une boite à bijoux pratique, intuitive, qui me permette de ne pas perdre mes bijoux et de les retrouver facilement.
Je ne veux pas un labyrinthe qui m’oblige à connaitre par coeur le plan du labyrinthe pour retrouver mes bijoux.
C’est marrant que cela m’arrive ce matin, le jour même où je vais au Mardi Gras Hortis consacré à Git : je serais peut être plus détendu ce soir au retour 😉
En tout cas, le fait de vous en avoir parlé dans ce post cathartique me détend : je vais pouvoir retourner faire mon diff 😉