Historique Git & Concepts clés
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 :
| Exigence | Explication |
|---|---|
| Vitesse | Doit être rapide même sur de grands projets |
| Distribué | Pas de serveur central requis |
| Non-linéaire | Fort support des branches et fusions |
| Intégrité | La corruption des données doit être détectable |
| Libre et ouvert | Ne jamais dépendre d'outils propriétaires |
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 :
| Zone | Aussi appelée | Description |
|---|---|---|
| Répertoire de travail | Working Directory | Vos fichiers sur disque tels que vous les éditez |
| Zone de staging | Index, Cache | Fichiers marqués « prêts à commiter » |
| Dépôt | Répertoire .git | Historique 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é
.gitavec 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 :
| Champ | Description | Exemple |
|---|---|---|
| Hash (SHA-1) | Identifiant unique | a3f4b2c |
| Auteur | Qui a fait le commit | Alice <alice@exemple.com> |
| Date | Quand il a été commité | 2026-03-18 14:30 |
| Message | Description des changements | Ajout de la fonctionnalité de connexion |
| Parent | Référence au commit précédent | f1d3e8a |
| Tree | Snapshot 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 :
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) :
| Objet | Description | Exemple |
|---|---|---|
| Blob | Contenu d'un fichier | Les octets de main.py |
| Tree | Une liste de répertoire | Liens vers des blobs et sous-trees |
| Commit | Un snapshot avec métadonnées | Hash, auteur, message, parent |
| Tag | Une référence nommée à un commit | v1.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 :
HEADpointe vers la branche actuelle - En état « HEAD détaché » :
HEADpointe directement vers un commit
Résumé
| Concept | Définition | Analogie |
|---|---|---|
| Dépôt | Dossier suivi par Git | Album photo |
| Commit | Snapshot + métadonnées | Une photo dans l'album |
| Répertoire de travail | Vos fichiers tels qu'ils sont maintenant | Papier sur votre bureau |
| Zone de staging | Fichiers prêts à commiter | Boîte prête à expédier |
| HEAD | Où vous êtes actuellement | Marque-page dans l'album |
| Hash (SHA-1) | Identifiant unique du commit | Numéro de série de la photo |