Skip to content

Instantly share code, notes, and snippets.

@nymous
Last active February 18, 2017 20:18
Show Gist options
  • Save nymous/25fcc7be64d8dd5033ac3dfd7674ed7b to your computer and use it in GitHub Desktop.
Save nymous/25fcc7be64d8dd5033ac3dfd7674ed7b to your computer and use it in GitHub Desktop.
Forma git Rézoléo 2017

Forma git

Qu'est-ce que c'est quoi dis donc git ?

Git est un logiciel de gestion de versions. Développé par Linus Torvalds en 2005 pour gérer le développement du noyau Linux. Git est disponible sur à peu près toutes les plateformes : Windows, macOS, Linux (toutes les distro), Android (et autres ARM)...

(PS : Ça se prononce "guitte", à l'inverse de "gif" (qui se dit "jif"))

Pourquoi utiliser un gestionnaire de version ?

Projet perso :

  • On avance sur ses fonctionnalités, ça marche, jusqu'à un moment où on essaie une nouvelle feature qui plante tout, on tente de réparer, ça fout encore plus la merde, c'est le chaos, des modifications dans 20 fichiers différents... On finit par appuyer frénétiquement sur Ctrl+Z en priant pour avoir assez d'historique.
  • Si on est plus prévoyant, on fait une copie du dossier "version_qui_marche_2017-02-12", puis une autre "version_qui_marche_vraiment_2017-02-12-14h35"... Le répertoire de travail est dégueulasse, y'a 15 copies partout, et on ne s'y retrouve plus.
  • On commence à bosser sur une feature, et puis on a soudainement une idée de génie sur laquelle on veut bosser immédiatement. Problème : on a laissé le code dans un état semi-terminé, ça ne peut pas compiler parce qu'on a pas fini, mais on ne veut pas revenir en arrière pour ne pas perdre le travail déjà effectué.
  • On se retrouve à commenter du code qui ne sert plus/est cassé, en se disant que ça servira peut-être un jour -> le code est pollué
  • Si jamais son ordinateur meurt, adieu code... 😢

Projet collectif :
Comment bosser à plusieurs sur un projet ? Comment partager son code ?

  • Envoyer un .zip avec son code, et les gens doivent copier-coller les parties modifiées dans leur code ?
  • Google Drive ? Mais les fichiers ne sont pas synchronisés en temps réel, et on ne sait pas comment Google va fusionner un fichier modifié par 2 personnes différentes.
  • Utiliser une seule machine, et coder à tour de rôle...

C'est dans toute ces situations que les gestionnaires de versions peuvent servir.

  • On peut sauvegarder l'état de tous les fichiers à un instant dans le temps, et naviguer dans l'historique de tous ces "points" à l'envi. Ajout/suppression/modification de lignes, ajout/suppression de fichiers, tout est sauvegardé, et un message permettant d'indiquer l'objet du changement permet de s'y retrouver.
  • Un serveur central garde une copie de tout le code, on peut le blinder pour protéger les sources.
  • On peut travailler à plusieurs grâce à des branches distinctes.
  • On peut travailler sur plusieurs fonctionnalités en même temps de manière totalement indépendante, là aussi grâce aux branches.
  • On gagne des trucs assez cool/swag, comme la possibilité de retrouver le moment exact dans le temps où un bug a été introduit, quelles lignes de code sont concernées, qui a tapé ce code... (avec git blame)

Autres solutions :

  • SVN (aka Subversion)
  • CVS
  • Mercurial
  • Bazaar

(Dé)centralisé ?

SVN et CVS sont des gestionnaires de versions centralisée => un seul dépôt sert de référence, une seule source de vérité : le serveur central où le code est stocké. Avantages : Tout le monde est toujours à jour sur le code. Problèmes : Si Internet n'est pas là, vous ne pouvez pas travailler. Si Internet est lent, vous travaillez très difficilement.

Git et Mercurial sont des gestionnaires de versions décentralisée. Chacun va travailler à son rythme sur une version locale du dépot. Avantages :

  • Le code est chez tous les développeurs, ce qui limite les risques si jamais le serveur central meurt.
  • On peut travailler hors-ligne (et les opérations sont plus rapides, car faites en local).
  • On peut tester des trucs, faire des brouillons localement sans polluer le dépot principal (et les autres développeurs). Désavantages :
  • Cloner le dépot est plus long, puisqu'on récupère tout l'historique du projet (mais encore une fois, si le serveur meurt on a le code).
  • Difficile de merge des fichiers binaires modifiés par 2 personnes en même temps.

Particularités de git

Ligne de commande Décentralisé

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment