Git – Présentation Basique Et Non-Exhaustive
Total Page:16
File Type:pdf, Size:1020Kb
Git – Présentation basique et non-exhaustive Matthieu FOURNET 29 septembre 2021 doc.callmematthi.eu/TOC_Git.html [email protected] Sommaire 1 Le versioning : quoi ? pourquoi ? 2 Git – généralités 3 Git en détail 4 Trucs en vrac 5 Mes $0.02 de dernière minute Git – Présentation basique et non-exhaustive 2/117 Le versioning : quoi ? pourquoi ? Git – Présentation basique et non-exhaustive 3/117 le versionnage (aka “versioning”) mécanisme qui consiste à conserver la version d’une entité logicielle quelconque, de façon à pouvoir la retrouver facilement, même après l’apparition et la mise en place de versions plus récentes. Git – Présentation basique et non-exhaustive 4/117 “versioning” manuel Git – Présentation basique et non-exhaustive 5/117 “versioning” manuel, la méthode CPOLD Git – Présentation basique et non-exhaustive 6/117 “versioning” manuel, la méthode “bavarde” NB : cette méthode décrit les versions successives mais ne permet d’en restaurer aucune. Git – Présentation basique et non-exhaustive 7/117 “versioning” manuel : le problème (1/3) Ces méthodes (et bien d’autres) montrent que : le besoin de “versioning” est réel on a tous fait du CPOLD au moins une fois on a l’impression de versionner, sans le faire réellement faute d’outil dédié : on s’emm***e à versionner manuellement on le fait mal : demande une extrême rigueur pour être (peu) efficace procédé très sensible aux erreurs peu souple coûteux en temps + espace disque + gymnastique intellectuelle inadapté au travail en équipe Git – Présentation basique et non-exhaustive 8/117 “versioning” manuel : le problème (2/3) Il est impossible de versionner manuellement : plusieurs fichiers inter-dépendants sur plusieurs versions avec un historique non linéaire Rappel : “versionner” = être capable de restaurer n’importe quelle version d’une entité logicielle Git – Présentation basique et non-exhaustive 9/117 “versioning” manuel : le problème (3/3) avec 3 fichiers source, en 10 itérations, on a 23 fichiers en partant de la situation présente t10, comment restaurer : t3 ? t8 ? Git – Présentation basique et non-exhaustive 10/117 Un outil de “versioning” : pour quoi faire ? collaboration : travailler à plusieurs sur les mêmes fichiers en même temps synchronisation : le travail de chacun profite à tous traçabilité : qui a changé quoi, quand, comment et pourquoi ? fonction avancées, outil de développement : “backup”/“restore” “undo” isolation des développements (branches) Le “versioning” ne s’applique pas qu’au code et n’est pas réservé aux développeurs. Git – Présentation basique et non-exhaustive 11/117 Historique : quelques outils de “versioning” 1970 : Panvalet 1972 : SCCS 1985 : RVS 1986 : CVS 2000 : BitKeeper, Apache Subversion (SVN) 2003 : darcs 2005 : Git, Mercurial, GNU Bazaar 2007 : Fossil ... (source : https://en.wikipedia.org/wiki/Comparison_of_version-control_software\#History_and_adoption) Git – Présentation basique et non-exhaustive 12/117 Git – généralités Présentations Git vs “rest of the world” Git – Présentation basique et non-exhaustive 13/117 Présentations Git – Présentation basique et non-exhaustive 14/117 Git ... (1/2) est un logiciel libre de “versioning” sous licence GPL v2 a été créé en 2005 par Linus Torvalds (entre autres) en moins de 15 jours pour le code source de Linux (détails ici, là, et là), cap du million de “commits” franchi en mai 2021 est écrit en C est versionné sous Git : https://github.com/git/git Git – Présentation basique et non-exhaustive 15/117 Git ... (2/2) est un logiciel de “versioning” parmi d’autres n’est pas le plus récent est / n’est pas le meilleur logiciel de “versioning” </troll> est le plus populaire actuellement : nombre de questions sur stackoverflow.com (source) Git – Présentation basique et non-exhaustive 16/117 Signification de “git” littéralement (en anglais) : “une personne désagréable ou méprisable” (c’est-à dire : “un c*nnard”, Linus Torvalds ne cherchant pas à être “politiquement correct” à tout prix ;-) Sinon : un mot de 3 lettres, prononçable, et pas déjà utilisé par une commande Unix quand il fonctionne : “Global Information Tracker” quand il ne fonctionne pas : “Goddamn Idiotic Truckload (of sh*t)” Git – Présentation basique et non-exhaustive 17/117 Git vs “rest of the world” Git – Présentation basique et non-exhaustive 18/117 Git vs SVN : gestion des branches les branches font partie du coeur de Git. Leur utilisation est : facile rapide encouragée SVN est moins pratique pour travailler avec des branches : plus long : la création d’une branche implique de dupliquer l’intégralité du dépôt vers un nouveau répertoire (consommation d’espace disque, délai de copie) en pratique, l’espace disque limite le nombre de branches plus compliqué lors du merge Git – Présentation basique et non-exhaustive 19/117 Git vs SVN : Git est décentralisé techniquement, aucun dépôt Git n’a le rôle de “point central” : tous les dépôts interagissent d’égal à égal on fait jouer le rôle de “point central” à l’un des dépôts pour des questions pratiques Git peut assurer ce rôle seul (via CLI + SSH + scripting) ou avec des outils tiers tels que GitLab ou GitHub Git – Présentation basique et non-exhaustive 20/117 Git vs GitHub vs GitLab GitHub : dispo via le web uniquement GitLab : peut être installé en local ajoutent des fonctionnalités à Git : visualisation du dépôt via une interface web : diff, commit, ... pull request, merge request, ... intégration continue + déploiement continu gestion de projets + dépôts + utilisateurs “ticketing” Wiki ... Git – Présentation basique et non-exhaustive 21/117 Git en détail Briques de base Utiliser Git L’historique Les branches Git – Présentation basique et non-exhaustive 22/117 Briques de base Git – Présentation basique et non-exhaustive 23/117 Briques de base (source : NDP Software Git cheatsheet) Stash Workspace (ou Working Directory) Index (ou Staging Area) Local Repository Upstream Repository Git – Présentation basique et non-exhaustive 24/117 Briques de base : Stash . o O (ne pas oublier d’en parler plus tard...) Git – Présentation basique et non-exhaustive 25/117 Briques de base : Working Directory Répertoire et sous-répertoires dans lesquels se trouvent les fichiers suivis par Git c’est ici que l’utilisateur effectue des changements aux fichiers (ajout / modification / suppression) Git peut changer le contenu de cet espace sur demande explicite de l’utilisateur lors d’un changement de branche ou lorsque l’utilisateur consulte un état passé du dépôt Git – Présentation basique et non-exhaustive 26/117 Briques de base : Index Zone tampon dans laquelle l’utilisateur regroupe des changements en vue du prochain commit. équivalent “IRL”:“packaging” dans un entrepôt l’utilisateur peut ajouter ou retirer des changements à l’Index (changement = ajout / modification / suppression) il peut faire cela en une seule ou plusieurs opérations se termine par l’opération de commit Git – Présentation basique et non-exhaustive 27/117 Briques de base : Local Repository Base de données au format texte dans laquelle Git stocke l’historique du dépôt. visible sous la forme d’un répertoire .git dans le Working Directory ne JAMAIS aller farfouiller là-dedans !!! Même si une recherche Google vous a indiqué un moyen “infaillible” de résoudre votre problème. Il existe certainement une commande pour faire la même chose de manière sûre. Git – Présentation basique et non-exhaustive 28/117 Briques de base : Upstream Repository C’est le dépôt “central” géré par GitLab. 1 1. Au sein d’une équipe travaillant sur un projet commun, n’importe quel dépôt Git peut être l’Upstream Repository de n’importe quel autre dépôt (et réciproquement). Cela est rendu possible par la nature décentralisée de Git. En pratique, l’Upstream Repository est la plupart du temps un dépôt centralisé GitLab (ou équivalent). Git – Présentation basique et non-exhaustive 29/117 Briques de base : vue d’ensemble (inspiré de : blog de Rachel M. Carmena) Git – Présentation basique et non-exhaustive 30/117 Utiliser Git Git – Présentation basique et non-exhaustive 31/117 Utiliser Git : cloner un dépôt à faire une seule fois, en commençant à travailler sur le projet télécharge le contenu du dépôt dans le Working Directory télécharge l’historique du dépôt et crée la base locale Git – Présentation basique et non-exhaustive 32/117 Utiliser Git : fichiers suivis et non suivis Git ne versionne que les fichiers explicitement déclarés avec git add utiliser les “wildcards” avec précaution : risque de surcharger le dépôt de fichiers inutiles. Éviter : git add * git add . Git – Présentation basique et non-exhaustive 33/117 Utiliser Git : bonnes pratiques avec git add (1/2) Idéalement, on ne versionne que du texte (code source, scripts, documentation, HTML, CSS, XML, SVG, ...). Git est optimisé pour gérer du texte (compression, recherche, comparaison, fusion, ...). On ne versionne pas les fichiers qui peuvent être obtenus à partir des fichiers versionnés, quel que soit leur type (exécutables compilés : problème de “l’oeuf-ou-la-poule”) Les fichiers “binaires” sont tolérés avec modération (ils alourdissent le dépôt). Si besoin, utiliser des outils tiers. ATTENTION : chaque utilisateur devra télécharger l’intégralité du dépôt (contenu actuel + historique) en rejoignant le projet !!! Git – Présentation basique et non-exhaustive 34/117 Utiliser Git : bonnes pratiques avec git add (2/2) Lorsque la tentation est trop grande de “détourner” Git des cas d’usages “classiques”, il existe des outils dédiés : git-annex : synchronisation de répertoires Git-LFS :“versioning” de gros fichiers binaires Git – Présentation basique et non-exhaustive 35/117 Parenthèse : comment SVN gère et stocke les versions successives d’un fichier (source : git-scm.com) SVN (et d’autres) stocke les informations sous la forme : d’une liste de fichiers et d’une liste de différences Git – Présentation basique et non-exhaustive 36/117 Parenthèse : comment Git gère et stocke les versions successives d’un fichier (source : git-scm.com) Git stocke les informations sous la forme : d’un “snapshot” des fichiers, à chaque commit de références vers les versions précédentes pour les fichiers sans changements Permet à Git de sauter très rapidement d’une version à une autre, quel que soit le temps écoulé entre les 2.