Git 🌙
Chapters â–Ÿ 2nd Edition

1.3 DĂ©marrage rapide - Rudiments de Git

Rudiments de Git

Donc, qu’est-ce que Git en quelques mots ? Il est important de bien comprendre cette section, parce que si on comprend la nature de Git et les principes sur lesquels il repose, alors utiliser efficacement Git devient simple. Au cours de l’apprentissage de Git, essayez de libĂ©rer votre esprit de ce que vous pourriez connaĂźtre d’autres VCS, tels que Subversion et Perforce ; ce faisant, vous vous Ă©viterez de petites confusions Ă  l’utilisation de cet outil. Git enregistre et gĂšre l’information trĂšs diffĂ©remment des autres systĂšmes, mĂȘme si l’interface utilisateur paraĂźt similaire ; comprendre ces diffĂ©rences vous Ă©vitera des surprises.

Des instantanés, pas des différences

La diffĂ©rence majeure entre Git et les autres VCS (Subversion et autres) rĂ©side dans la maniĂšre dont Git considĂšre les donnĂ©es. Au niveau conceptuel, la plupart des autres systĂšmes gĂšrent l’information comme une liste de modifications de fichiers. Ces systĂšmes (CVS, Subversion, Perforce et autres) considĂšrent l’information qu’ils gĂšrent comme une liste de fichiers et les modifications effectuĂ©es sur chaque fichier dans le temps.

D’autres systùmes sauvent l’information comme des modifications sur des fichiers.
Figure 4. D’autres systùmes sauvent l’information comme des modifications sur des fichiers.

Git ne gĂšre pas et ne stocke pas les informations de cette maniĂšre. À la place, Git pense ses donnĂ©es plus comme un instantanĂ© d’un mini systĂšme de fichiers. À chaque fois que vous validez ou enregistrez l’état du projet dans Git, il prend effectivement un instantanĂ© du contenu de votre espace de travail Ă  ce moment et enregistre une rĂ©fĂ©rence Ă  cet instantanĂ©. Pour ĂȘtre efficace, si les fichiers n’ont pas changĂ©, Git ne stocke pas le fichier Ă  nouveau, juste une rĂ©fĂ©rence vers le fichier original qu’il a dĂ©jĂ  enregistrĂ©. Git pense ses donnĂ©es plus Ă  la maniĂšre d’un flux d’instantanĂ©s.

Git stocke les données comme des instantanés du projet au cours du temps.
Figure 5. Stockage des données comme des instantanés du projet au cours du temps.

C’est une distinction importante entre Git et quasiment tous les autres VCS. Git a reconsidĂ©rĂ© quasiment tous les aspects de la gestion de version que la plupart des autres systĂšmes ont copiĂ©s des gĂ©nĂ©rations prĂ©cĂ©dentes. Git ressemble beaucoup plus Ă  un mini systĂšme de fichiers avec des outils incroyablement puissants construits dessus, plutĂŽt qu’à un simple VCS. Nous explorerons les bĂ©nĂ©fices qu’il y a Ă  penser les donnĂ©es de cette maniĂšre quand nous aborderons la gestion de branches dans Les branches avec Git.

Presque toutes les opérations sont locales

La plupart des opĂ©rations de Git ne nĂ©cessitent que des fichiers et ressources locaux — gĂ©nĂ©ralement aucune information venant d’un autre ordinateur du rĂ©seau n’est nĂ©cessaire. Si vous ĂȘtes habituĂ© Ă  un CVCS oĂč toutes les opĂ©rations sont ralenties par la latence des Ă©changes rĂ©seau, cet aspect de Git vous fera penser que les dieux de la vitesse ont octroyĂ© leurs pouvoirs Ă  Git. Comme vous disposez de l’historique complet du projet localement sur votre disque dur, la plupart des opĂ©rations semblent instantanĂ©es.

Par exemple, pour parcourir l’historique d’un projet, Git n’a pas besoin d’aller le chercher sur un serveur pour vous l’afficher ; il n’a qu’à simplement le lire directement dans votre base de donnĂ©es locale. Cela signifie que vous avez quasi-instantanĂ©ment accĂšs Ă  l’historique du projet. Si vous souhaitez connaĂźtre les modifications introduites entre la version actuelle d’un fichier et son Ă©tat un mois auparavant, Git peut rechercher l’état du fichier un mois auparavant et rĂ©aliser le calcul de diffĂ©rence, au lieu d’avoir Ă  demander cette diffĂ©rence Ă  un serveur ou de devoir rĂ©cupĂ©rer l’ancienne version sur le serveur pour calculer la diffĂ©rence localement.

Cela signifie aussi qu’il y a trĂšs peu de choses que vous ne puissiez rĂ©aliser si vous n’ĂȘtes pas connectĂ© ou hors VPN. Si vous voyagez en train ou en avion et voulez avancer votre travail, vous pouvez continuer Ă  gĂ©rer vos versions sans soucis en attendant de pouvoir de nouveau vous connecter pour partager votre travail. Si vous ĂȘtes chez vous et ne pouvez avoir une liaison VPN avec votre entreprise, vous pouvez tout de mĂȘme travailler. Pour de nombreux autres systĂšmes, faire de mĂȘme est impossible ou au mieux trĂšs contraignant. Avec Perforce par exemple, vous ne pouvez pas faire grand-chose tant que vous n’ĂȘtes pas connectĂ© au serveur. Avec Subversion ou CVS, vous pouvez Ă©diter les fichiers, mais vous ne pourrez pas soumettre des modifications Ă  votre base de donnĂ©es (car celle-ci est sur le serveur non accessible). Cela peut sembler peu important a priori, mais vous seriez Ă©tonnĂ© de dĂ©couvrir quelle grande diffĂ©rence cela peut constituer Ă  l’usage.

Git gĂšre l’intĂ©gritĂ©

Dans Git, tout est vĂ©rifiĂ© par une somme de contrĂŽle avant d’ĂȘtre stockĂ© et par la suite cette somme de contrĂŽle, signature unique, sert de rĂ©fĂ©rence. Cela signifie qu’il est impossible de modifier le contenu d’un fichier ou d’un rĂ©pertoire sans que Git ne s’en aperçoive. Cette fonctionnalitĂ© est ancrĂ©e dans les fondations de Git et fait partie intĂ©grante de sa philosophie. Vous ne pouvez pas perdre des donnĂ©es en cours de transfert ou corrompre un fichier sans que Git ne puisse le dĂ©tecter.

Le mĂ©canisme que Git utilise pour rĂ©aliser les sommes de contrĂŽle est appelĂ© une empreinte SHA-1. C’est une chaĂźne de caractĂšres composĂ©e de 40 caractĂšres hexadĂ©cimaux (de '0' Ă  '9' et de 'a' Ă  'f') calculĂ©e en fonction du contenu du fichier ou de la structure du rĂ©pertoire considĂ©rĂ©. Une empreinte SHA-1 ressemble Ă  ceci :

24b9da6552252987aa493b52f8696cd6d3b00373

Vous trouverez ces valeurs à peu prÚs partout dans Git car il les utilise pour tout. En fait, Git stocke tout non pas avec des noms de fichiers, mais dans la base de données Git indexée par ces valeurs.

GĂ©nĂ©ralement, Git ne fait qu’ajouter des donnĂ©es

Quand vous rĂ©alisez des actions dans Git, la quasi-totalitĂ© d’entre elles ne font qu’ajouter des donnĂ©es dans la base de donnĂ©es de Git. Il est trĂšs difficile de faire rĂ©aliser au systĂšme des actions qui ne soient pas rĂ©versibles ou de lui faire effacer des donnĂ©es d’une quelconque maniĂšre. Par contre, comme dans la plupart des systĂšmes de gestion de version, vous pouvez perdre ou corrompre des modifications qui n’ont pas encore Ă©tĂ© entrĂ©es en base ; mais dĂšs que vous avez validĂ© un instantanĂ© dans Git, il est trĂšs difficile de le perdre, spĂ©cialement si en plus vous synchronisez votre base de donnĂ©es locale avec un dĂ©pĂŽt distant.

Cela fait de l’usage de Git un vrai plaisir, car on peut expĂ©rimenter sans danger de casser dĂ©finitivement son projet. Pour une information plus approfondie sur la maniĂšre dont Git stocke ses donnĂ©es et comment rĂ©cupĂ©rer des donnĂ©es qui pourraient sembler perdues, rĂ©fĂ©rez-vous Ă  Annuler des actions.

Les trois Ă©tats

Un peu de concentration maintenant. Il est primordial de se souvenir de ce qui suit si vous souhaitez que le reste de votre apprentissage s’effectue sans difficultĂ©. Git gĂšre trois Ă©tats dans lesquels les fichiers peuvent rĂ©sider : modifiĂ©, indexĂ© et validĂ©.

  • ModifiĂ© signifie que vous avez modifiĂ© le fichier mais qu’il n’a pas encore Ă©tĂ© validĂ© en base.

  • IndexĂ© signifie que vous avez marquĂ© un fichier modifiĂ© dans sa version actuelle pour qu’il fasse partie du prochain instantanĂ© du projet.

  • ValidĂ© signifie que les donnĂ©es sont stockĂ©es en sĂ©curitĂ© dans votre base de donnĂ©es locale.

Ceci nous mĂšne aux trois sections principales d’un projet Git : le rĂ©pertoire Git, le rĂ©pertoire de travail et la zone d’index.

RĂ©pertoire de travail, zone d’index et rĂ©pertoire Git.
Figure 6. RĂ©pertoire de travail, zone d’index et rĂ©pertoire Git

Le rĂ©pertoire Git est l’endroit oĂč Git stocke les mĂ©ta-donnĂ©es et la base de donnĂ©es des objets de votre projet. C’est la partie la plus importante de Git, et c’est ce qui est copiĂ© lorsque vous clonez un dĂ©pĂŽt depuis un autre ordinateur.

Le rĂ©pertoire de travail est une extraction unique d’une version du projet. Ces fichiers sont extraits depuis la base de donnĂ©es compressĂ©e dans le rĂ©pertoire Git et placĂ©s sur le disque pour pouvoir ĂȘtre utilisĂ©s ou modifiĂ©s.

La zone d’index est un simple fichier, gĂ©nĂ©ralement situĂ© dans le rĂ©pertoire Git, qui stocke les informations concernant ce qui fera partie du prochain instantanĂ©. On l’appelle aussi des fois la zone de prĂ©paration.

L’utilisation standard de Git se passe comme suit :

  1. vous modifiez des fichiers dans votre répertoire de travail ;

  2. vous indexez les fichiers modifiĂ©s, ce qui ajoute des instantanĂ©s de ces fichiers dans la zone d’index ;

  3. vous validez, ce qui a pour effet de basculer les instantanĂ©s des fichiers de l’index dans la base de donnĂ©es du rĂ©pertoire Git.

Si une version particuliĂšre d’un fichier est dans le rĂ©pertoire Git, il est considĂ©rĂ© comme validĂ©. S’il est modifiĂ© mais a Ă©tĂ© ajoutĂ© dans la zone d’index, il est indexĂ©. S’il a Ă©tĂ© modifiĂ© depuis le dernier instantanĂ© mais n’a pas Ă©tĂ© indexĂ©, il est modifiĂ©. Dans Les bases de Git, vous en apprendrez plus sur ces Ă©tats et comment vous pouvez en tirer parti ou complĂštement occulter la phase d’indexation.

scroll-to-top