Git, ou l'ecriture a N cerveaux

Published: April 17, 2016, 1:45 p.m.

b'

Bonjour, bienvenue dans l\\u2019\\xe9pisode 12 sur Git.

\\n\\n

Beaucoup de cours pour apprendre \\xe0 coder se basent sur Git,\\net c\\u2019est tr\\xe8s bien de viser tout de suite une bonne pratique\\nqui ne va jamais cesser d\\u2019\\xeatre utile. En plus, un code bien\\nversionn\\xe9 c\\u2019est le droit de faire des erreurs et revenir en\\narri\\xe8re, ce qui est parfait pour se rassurer quand on tente\\ndes choses nouvelles.

\\n\\n

Mais cela bloque aussi les d\\xe9butants : je voulais \\u201cjuste\\u201d\\napprendre \\xe0 coder, et voil\\xe0 qu\\u2019on me gave d\\u2019outils annexes\\nsans vraiment me dire pourquoi ils sont l\\xe0, si on peut\\ns\\u2019en passer au d\\xe9but, ou si on peut apprendre juste quelques\\nparties et se lancer, ou qu\\u2019on doit tout savoir d\\xe8s le d\\xe9but.

\\n\\n

Du coup le but ici n\\u2019est pas de vous faire une liste des commandes\\n(j\\u2019ai essay\\xe9 avec l\\u2019\\xe9pisode sur les it\\xe9rateurs, c\\u2019est beaucoup trop\\nlong et pas forc\\xe9ment adapt\\xe9 en podcast, et en plus il y a d\\xe9j\\xe0\\npl\\xe9thore de sites et docs tr\\xe8s bien faits) mais encore une fois de\\ndonner une vue d\\u2019ensemble pour d\\xe9dramatiser le sujet.

\\n\\n

La tradition orale

\\n\\n

J\\u2019aimerais rapprocher l\\u2019\\xe9criture de code (du texte \\xe0 la base),\\navec quelque chose que l\\u2019humanit\\xe9 fait depuis tr\\xe8s longtemps :\\nraconter des histoires.

\\n\\n

Dans toutes les cultures, mythes, l\\xe9gendes, contes se transmettent\\npar tradition orale : les griots, les druides, les aedes grecs\\u2026\\net un jour tout cela se cristallise dans un ouvrage : l\\u2019\\xe9pop\\xe9e de\\nGilgamesh ou l\\u2019Iliade et l\\u2019Odyss\\xe9e, etc.

\\n\\n

Comme dans le logiciel ou le business, l\\u2019\\xe9criture dans une version\\n\\u201ccanonique\\u201d n\\u2019emp\\xeache pas les reprises, red\\xe9couvertes ou r\\xe9inventions :\\nMoli\\xe8re a repris \\xe9norm\\xe9ment d\\u2019id\\xe9es de ses fables chez Esope,\\npourtant il a \\xe9crit quelque chose d\\u2019original en l\\u2019adaptant \\xe0 sa\\nlangue et \\xe0 son \\xe9poque.

\\n\\n

Pourquoi versionner ?

\\n\\n

On souhaite avoir plusieurs versions d\\u2019un logiciel qu\\u2019on \\xe9crit : soit\\nparce qu\\u2019on travaille \\xe0 plusieurs, soit pour faire une exp\\xe9rience par\\nci, une tentative par l\\xe0, sans que cela ne bloque tout le monde.

\\n\\n

Vous avez tent\\xe9 quelque chose de trop courageux toute la journ\\xe9e\\nde mardi ? Rien ne marche le soir ? Pas de souci : on revient \\xe0\\nla version de lundi.

\\n\\n

Quand on commence un long chantier sur son code, on ne veut pas le\\nmettre en prod tant qu\\u2019il n\\u2019est pas fini, pourtant il faut bien que le\\nlogiciel avance : une urgence, un patch de s\\xe9curit\\xe9, et on doit soit\\nreprendre la version d\\u2019avant votre chantier, soit mettre en prod\\nquelque chose qui n\\u2019est pas ma\\xeetris\\xe9.

\\n\\n

Une fa\\xe7on simple de faire \\xe7a \\xe9tait de tout copier-coller dans des\\ndossiers, avec des noms plus ou moins explicites (v1, v2, backup, test\\u2026)\\nmais plus on va mener de chantiers en parall\\xe8le plus \\xe7a va \\xeatre\\ndifficile, d\\xe9j\\xe0 de tracer, mais ensuite de remettre ensemble \\xe0 la\\nfin quand le r\\xe9sultat est satisfaisant et \\u201cm\\xe9rite\\u201d de rentrer dans\\nle produit final.

\\n\\n

Les conflits

\\n\\n

Bien entendu, \\xe7a arrive tout le temps. Parfois, pour avancer,\\non doit se baser sur une hypoth\\xe8se diff\\xe9rente :\\npour le m\\xe9tier, une d\\xe9couverte qui n\\u2019\\xe9tait pas dans le plan de base,\\nune contrainte l\\xe9gale ou une opportunit\\xe9 business ;\\npour les d\\xe9veloppeurs, des contraintes ou opportunit\\xe9s techniques.

\\n\\n

Votre code et votre base de donn\\xe9es peuvent avoir des changements\\nmajeurs qui mettent une partie du syst\\xe8me KO.\\nQuand \\xe7a arrive, votre code est en conflit avec celui du voisin.

\\n\\n

Par exemple, dans l\\u2019histoire du barde voisin, le personnage\\nprincipal meurt, c\\u2019est bien plus dramatique, mais vous en aviez\\nbesoin dans la sc\\xe8ne finale que vous aviez enjoliv\\xe9e : l\\u2019un des\\ndeux aspects va devoir changer, quitte \\xe0 faire deux ouvrages.

\\n\\n

Quand \\xe7a n\\u2019arrive pas ou tr\\xe8s rarement\\u2026 soit votre projet ne\\nchange plus (pas toujours bon signe) soit vous aviez une excellente\\nconception ou architecture logicielle (souvent le genre de choses\\ndont on se rend compte avec beaucoup d\\u2019exp\\xe9rience, ou a posteriori).

\\n\\n

Gestion de version, distribu\\xe9e

\\n\\n

Typiquement les versions des contes de Grimm finissent mal et les\\nDisney finissent bien : je ne dis pas que l\\u2019un ou l\\u2019autre a raison,\\nils ont chacun leur public, leur \\xe9poque, leur succ\\xe8s, et sont tous\\nles deux d\\xe9positaires d\\u2019une version qui est stable et se suffit \\xe0 elle-m\\xeame.

\\n\\n

Chez les d\\xe9veloppeurs, ce serait un fork du logiciel, et chacun vivra\\nsa vie compl\\xe8tement s\\xe9par\\xe9e de l\\u2019autre. On ne remet plus trop de Grimm\\ndans les Disney, l\\u2019inverse \\xe0 la rigueur ?

\\n\\n

\\xc7a peut \\xeatre un changement de version majeure de la 1.0 \\xe0 la 2.0,\\nou deux branches de la m\\xeame histoire qui coexistent.

\\n\\n

Mais des sc\\xe9naristes qui travaillent en parall\\xe8le ?\\nTout simplement sont deux d\\xe9p\\xf4ts du m\\xeame code, qui ont vocation\\n\\xe0 fusionner un jour en reprenant le meilleur de chaque.\\nR\\xe9guli\\xe8rement, ils s\\u2019envoient ou ils vont chercher les modifications\\nde l\\u2019autre.

\\n\\n

Git est pr\\xe9vu pour \\xe7a, pour s\\u2019\\xe9changer les diff\\xe9rences pour que\\nchacun puisse profiter des am\\xe9liorations de l\\u2019autre, \\xe0 condition\\nd\\u2019\\xeatre pr\\xeat \\xe0 r\\xe9soudre les conflits.

\\n\\n

D\\xe9p\\xf4t, branche, versions, table de travail

\\n\\n

Du coup, Git propose \\xe9norm\\xe9ment de commandes en fonction des\\nsubtilit\\xe9s choisies : cloner, envoyer, r\\xe9cup\\xe9rer les d\\xe9p\\xf4ts ;\\nexp\\xe9rimenter et naviguer entre plusieurs branches des possibles ;\\nvoir l\\u2019\\xe9tat de votre table de travail, jeter les brouillons\\nou int\\xe9grer les nouveaux travaux \\xe0 telle ou telle branche ;\\nfusionner les modifications.

\\n\\n

Enfin, parfois, vous voulez pr\\xe9senter non seulement votre travail \\xe0\\nquelqu\\u2019un, mais qu\\u2019il ne voie pas les annotations et modifications\\nsuccessives : on peut alors r\\xe9\\xe9crire l\\u2019histoire des commits.

\\n\\n

L\\xe0 encore, \\xe7a n\\u2019est pas une op\\xe9ration quotidienne ou anodine :\\nma\\xeetrisez d\\u2019abord la base et vous saurez par la suite si vous voulez\\nvraiment le faire, et arm\\xe9 de la pratique git que vous aurez eu\\nentretemps, la m\\xe9thode vous semblera plus claire.

\\n\\n

Le distribu\\xe9 centralis\\xe9

\\n\\n

C\\u2019est compliqu\\xe9 d\\u2019imaginer que chacun a sa version.\\nDe toutes fa\\xe7on, un seul logiciel finira en production dans votre entreprise.\\nSouvent, on va se dire qu\\u2019un des d\\xe9p\\xf4ts a autorit\\xe9 sur les autres,\\ndisons celui de l\\u2019entreprise ou du projet et pas celui des contributeurs.\\nAu lieu de vous synchroniser avec chacun de vos coll\\xe8gues, vous le ferez via celui-ci.

\\n\\n

Git est si populaire que de nombreux outils de d\\xe9veloppement se basent dessus :\\nl\\u2019int\\xe9gration continue par exemple, permet de dire \\u201cquand une nouvelle\\nversion est envoy\\xe9e \\xe0 tel endroit, lance des tests,\\net s\\u2019ils r\\xe9ussissent, d\\xe9ploie le tout en production\\u201d.\\nConfort maximum, gain de temps : bel exemple d\\u2019automatisation.

\\n\\n

Il existe aussi de nombreuses plateformes, publiques ou priv\\xe9es.\\nGitHub \\xe9tant devenu de fait un h\\xe9bergeur majeur de projets Open Source,\\nil y a de fortes chances que toutes les briques dont votre projet a besoin\\npour fonctionner soient sur GitHub. Si vous avez un outil de gestion de\\nd\\xe9pendances (npm pour Node, gem pour Ruby par exemple), il y a de fortes\\nchances pour qu\\u2019il aille tout chercher sur GitHub.

\\n\\n

Du coup, bien que Git soit con\\xe7u pour \\xeatre un syst\\xe8me distribu\\xe9,\\nvous venez de baser un syst\\xe8me qui se centralise sur GitHub, et\\nen cas de probl\\xe8me chez eux, votre projet est affect\\xe9 aussi.

'