Aller au contenu principal

Historique Git & Concepts clés

Module 00 45 min

Objectifs de la section

  • Comprendre l'origine de Git et pourquoi il a été créé
  • Maîtriser les concepts fondamentaux : dépôt, commit, snapshot
  • Comprendre le modèle objet de Git
  • Distinguer les 3 zones de Git (répertoire de travail, staging, dépôt)

L'origine de Git

Linus Torvalds et le noyau Linux

En 2005, Linus Torvalds (créateur de Linux) se retrouva dans une crise :

  • Le noyau Linux avait des milliers de contributeurs dans le monde entier
  • L'outil qu'ils utilisaient (BitKeeper) révoqua sa licence gratuite
  • Ils avaient besoin d'un nouvel outil immédiatement — et il devait être meilleur

Torvalds passa 10 jours à écrire Git. Ses exigences :

ExigenceExplication
VitesseDoit être rapide même sur de grands projets
DistribuéPas de serveur central requis
Non-linéaireFort support des branches et fusions
IntégritéLa corruption des données doit être détectable
Libre et ouvertNe jamais dépendre d'outils propriétaires
Le nom de Git

Torvalds a choisi le nom « git » — argot britannique pour « idiot ». Il a dit : « Je nomme tous mes projets d'après moi-même. D'abord Linux, puis git. »

Chronologie de Git


Les 3 zones de Git

C'est le concept le plus important à comprendre dans Git. Chaque fichier vit dans l'une de ces 3 zones :

ZoneAussi appeléeDescription
Répertoire de travailWorking DirectoryVos fichiers sur disque tels que vous les éditez
Zone de stagingIndex, CacheFichiers marqués « prêts à commiter »
DépôtRépertoire .gitHistorique permanent de tous les commits

Analogie pratique

Pensez-y comme la préparation d'un colis à expédier :

  • Répertoire de travail = Votre bureau où vous travaillez sur des éléments
  • Zone de staging = La boîte où vous organisez ce que vous allez expédier
  • Dépôt = L'entrepôt où tous les colis expédiés sont stockés

Concepts clés

Qu'est-ce qu'un dépôt (repository) ?

Un dépôt (ou « repo ») est un dossier que Git suit. Il contient :

  • Tous vos fichiers de projet
  • Un dossier caché .git avec tout l'historique des versions
  • La configuration, les branches, les tags, etc.
mon-projet/
├── .git/ ← Le « cerveau » de Git (ne jamais toucher manuellement !)
│ ├── HEAD ← Pointe vers la branche actuelle
│ ├── config ← Configuration du dépôt
│ ├── objects/ ← Tous les objets Git (blobs, trees, commits)
│ └── refs/ ← Références aux branches et tags
├── src/
│ └── main.py
├── README.md
└── .gitignore

Qu'est-ce qu'un commit ?

Un commit est un instantané de votre projet à un moment précis. Chaque commit contient :

ChampDescriptionExemple
Hash (SHA-1)Identifiant uniquea3f4b2c
AuteurQui a fait le commitAlice <alice@exemple.com>
DateQuand il a été commité2026-03-18 14:30
MessageDescription des changementsAjout de la fonctionnalité de connexion
ParentRéférence au commit précédentf1d3e8a
TreeSnapshot des fichiers(tous les fichiers à ce moment)

Le modèle de snapshots de Git

Contrairement aux anciens VCS (comme SVN) qui stockent des différences (deltas), Git stocke des snapshots complets :

Stockage efficace

Git ne stocke pas le contenu complet de chaque fichier à chaque fois. Si un fichier n'a pas changé, Git stocke simplement une référence au fichier identique du commit précédent. Cela rend Git à la fois précis et efficace en stockage.


Les types d'objets Git

Git stocke tout sous forme de 4 types d'objets (tous identifiés par un hash SHA-1) :

ObjetDescriptionExemple
BlobContenu d'un fichierLes octets de main.py
TreeUne liste de répertoireLiens vers des blobs et sous-trees
CommitUn snapshot avec métadonnéesHash, auteur, message, parent
TagUne référence nommée à un commitv1.0.0 → commit a3f4b2c

Le pointeur HEAD

HEAD est un pointeur spécial qui indique toujours où vous êtes dans le dépôt :

  • En état normal : HEAD pointe vers la branche actuelle
  • En état « HEAD détaché » : HEAD pointe directement vers un commit

Résumé

ConceptDéfinitionAnalogie
DépôtDossier suivi par GitAlbum photo
CommitSnapshot + métadonnéesUne photo dans l'album
Répertoire de travailVos fichiers tels qu'ils sont maintenantPapier sur votre bureau
Zone de stagingFichiers prêts à commiterBoîte prête à expédier
HEADOù vous êtes actuellementMarque-page dans l'album
Hash (SHA-1)Identifiant unique du commitNuméro de série de la photo

Prochaines étapes