Notre guide pour apprendre Git
Par Maxime Bréhin • Publié le 17 févr. 2020

Chez Delicious Insights on a une expertise Git reconnue, notamment avec notre formation Git Total. Les années passant on a écrit pas mal de choses sur différents sujets, on avait même un site “git-attitude” dédié. Ce qui manquait et qu’on nous a régulièrement demandé, c’est un fil conducteur pour parcourir nos articles (mais pas que) et apprendre Git. En résumé un guide d’apprentissage de Git. Il est donc temps qu’on s’y colle !

Installation et configuration

Pour l'installation, on propose un guide qu’on met régulièrement à jour.

Ensuite il faut apporter quelques touches de personnalisation pour optimiser le comportement de Git. On paie ici le prix de la rétro-compatibilité souhaitée par la communauté. En gros toutes les nouveautés qui modifient des comportements de Git sont de base désactivées et doivent être consciemment activées via la configuration.

Notre objectif ici n’est pas de te décrire le fonctionnement ni même le détail de la conf, pour ça tu as accès à notre configuration partagée qu’on a gentiment documentée, et sinon l'article (qui commence à dater un poil) « Une configuration Git aux petits oignons ».

Si tu es utilisateur·rice du terminal (hors ZSH) tu voudras probablement le tuner pour avoir certaines informations dans le prompt sans avoir à faire par exemple un git status. Voici l’article qui va bien : « Un prompt Git qui déchire ».

Comme on est sympas on t’a fait un petit script qui permet de gérer la configuration et la personnalisation du prompt. On ne garantit pas qu’il marche pour tout le monde, alors au pire, tu suis la procédure des articles référencés précédemment.

Pour travailler avec un serveur Git, il est important de pouvoir automatiser la connexion. Pour ça on passe par ce qu’on appelle des clés asymétriques. Pour tout savoir là-dessus, lis donc l’article « Comprendre et maîtriser les clés SSH », un de nos plus gros succès !

Apprendre Git

Git est très utilisé, populaire, tout ça tout ça… Du coup on trouve pléthore de docs plus ou moins bien fichues, mais il reste parfois des zones d’ombre, ou simplement certains sujets qui sont mal traités à notre goût. C’est ça qui a motivé l’écriture de la plupart de nos articles.

Avant de foncer tête baissée…

… je te fais quelques recommandations pour préparer ton apprentissage.

Git est un support, un outil dont il faut retenir avant tout les concepts fonctionnels. Les aspects techniques sont secondaires, tout comme les commandes. Tu les retrouveras dès lors que tu auras bien en tête à quoi te sert Git et ce que tu souhaites en faire.

Pour bien apprendre, voici les étapes clés qu’on te recommande :

  1. Comprendre les concepts clés et tes attentes :
    • les zones, les états des fichiers
    • ce que tu veux mettre dans une révision/un commit (un ou plusieurs fichiers, une partie des modifs d’un fichier…)
    • ce que tu veux retranscrire dans un historique (à quoi doit ressembler «graphiquement» l’histoire de ton projet, et pourquoi ?)
    • isoler / paralléliser du travail (intérêt fonctionnel des branches)
    • travailler seul·e ou à plusieurs
  2. Les commandes de base
    • pour construire un commit, un historique (add, commit, restore)
    • pour analyser un historique (état des fichiers status, modifications apportées diff, lecture de l’historique log)
    • pour manipuler les branches (visualiser, créer branch, travailler switch/restore, fermer et intégrer un travail merge)
    • pour modifier un historique (derniers commits reset, ou plus large rebase)
  3. Plus dans le détail des commandes (options avancées, astuces…)

Maintenant, les ressources utiles

Pour la base, tu peux regarder notre cours vidéo gratuit « Les concepts clés de Git », que tu peux aussi retrouver sur notre chaîne Youtube « Apprendre Git ».

Une fois que tu as compris l’essentiel des mécanismes de base inhérents à Git, tu vas devoir apprendre les commandes usuelles. Tu peux alors choisir différentes approches :

Si tu veux manipuler et visualiser certains comportements de Git, on te propose 2 ressources géniales :

Apprendre plus et mieux

Après ça tu vas probablement vouloir creuser certains sujets essentiels :

Comment visualiser mon historique et y trouver une info précise, l’évolution d’une méthode sur la semaine écoulée, les derniers commits d’un membre de l’équipe… Ça, c’est lié au log Git. Tu peux donc regarder l’article suivant, et même si tu n’es pas utilisateur·rice du terminal, tu y découvriras l’étendue de la puissance du log : « git log : qui suis-je ? D’où viens-je ? Où vais-je ? ».

Comment manipuler mon historique, en commençant par apprendre à défaire les choses, mais sans angoisse, car avec Git on ne supprime jamais vraiment les commits… Là tu peux regarder du côté soit de notre article « Git reset : rien ne se perd, tout se transforme » (j’ai également fait une présentation sur ce sujet à Paris Web, dont voici la vidéo), soit de notre cours vidéo « “Git Undo” ou le savoir-défaire » qui décrit tout ça avec des schémas animés qui favorisent mieux ta compréhension.

Quand tu seras serein·e avec le fait de défaire des choses dans Git, tu vas probablement vouloir passer à la vitesse supérieure et manipuler de manière plus large ton historique avec la commande rebase. Vu que plein de gens ne saisissent pas la différence avec les fusions, on a un article « Bien utiliser Git merge et rebase » qui parle de tout ça, et encore une fois sa version plus aboutie en cours vidéo.

Workflows

Attention, divulgâcheur : je n’ai pas la prétention ici de te décrire comment travailler sur tes projets. L’idée est plutôt de te donner certaines clés pour les analyser et choisir la meilleure organisation en conséquence. En résumé, l’idée est d’avant tout de te faire réfléchir sans contrainte liée à un outil, mais plutôt en te disant que l’outil doit s’adapter à ce que tu estimes être une gestion de projet optimale (et ça tombe bien, c’est comme ça que Git a été pensé 😁).

Les articles qui suivent peuvent être pris en totalité ou indépendamment les uns des autres. Ils ne sont pas toujours parfaitement à jour et ne nous satisfont pas forcément pleinement, mais c’est le sujet qui veut ça…

Même si on déconseille généralement de prendre un « workflow Git » existant, ça reste intéressant de voir certaines approches connues, ne serait-ce que pour juger du bon et du mauvais. Atlassian a fait un très bon article sur ce sujet, qui parle notamment du très populaire « Git Flow » 😱.

Les bonus appréciables

Les hooks

Les hooks sont essentiels pour nous permettre tout un tas d’automatisations en vue d’augmenter la qualité de nos projets et de nous rattraper par le col en cas d’erreur flagrantes. L’article suivant décrit les grands principes qui les régissent : « Git Hooks ou la revanche du crochet Git ».

Un autre article complémentaire te donne un exemple d’automatisation côté client (sur ta machine, avant envoi au serveur) : « Hook’il est mon beau commit ? ».

Par ailleurs, j’ai là aussi fait une présentation dédiée à Paris Web, que j’ai facétieusement intitulée « Capitaine Flemme » : suis le lien pour en regarder la captation vidéo.

Submodules et subtrees, parce que ta vie est triste

Quand tu es puni·e et qu’on t’oblige à travailler avec les submodules, tu ne t’y retrouves pas ou peu, même après plusieurs années, simplement parce que les submodules, c’est compliqué pour répondre à des besoins très spécifiques. Nous aussi on a souffert quelques années avec ça, à se (re)prendre régulièrement les pieds dans le tapis avec des manips oubliées… Du coup on a écrit un roman pour tenter de mieux comprendre tout ça et d’éviter au mieux les pièges : « Comprendre et maîtriser les submodules Git ».

Mais en réalité, dans 99% des cas, quand on t’a imposé les submodules, c’est pour de mauvaises raisons ! Soit parce qu’on n’a pas compris qu’on peut faire pareil avec un gestionnaire de dépendances comme npm, bundler, composer, conan… ou parce qu’on n’a pas trop le choix en raison de l’architecture du projet, mais la plupart du temps on pourrait gérer ça avec les subtrees à la place. C’est juste qu’on ne les connaît pas parce qu’ils ne sont pas décrits dans la doc’ officielle : « Comprendre et maîtriser les subtrees Git ».

Et franchement, si tu n’as absolument pas le choix, tu t’en sortiras de toutes façons mieux avec la commande tierce-partie git subrepo.

En vrac

Voici 2 articles pour finir qui te décrivent des fonctionnalités de Git un peu à la marge mais qui pourraient t’être utiles :

(La photo de boussole qui sert de base à la vignette de cet article est de Aaron Burden sur Unsplash.)

Découvrez notre cours vidéo : Bien utiliser Git merge vs. rebase 🖥

Produire un historique cohérent et utile nécessite de savoir aussi bien nettoyer notre travail que fusionner des branches. Les commandes rebase et merge se complètent parfaitement quand on sait bien les utiliser…