Pourquoi Git existe
Le problème que Git résout et les trois zones de travail.
Objectifs
À la fin de cette leçon, vous saurez :
- expliquer le problème que Git résout ;
- situer working directory, dépôt et historique ;
- décrire ce qu'est un commit.
Le problème sans versioning
Sans outil, on finit par empiler des copies : projet-final.zip, projet-final-v2.zip, projet-final-vraiment-final.zip. Trois problèmes apparaissent :
- on ne sait plus quelle version est la bonne ni pourquoi elle a changé ;
- impossible de revenir en arrière proprement ;
- travailler à plusieurs devient un cauchemar d'échanges de fichiers.
Git répond aux trois : il enregistre chaque état du projet avec son auteur, sa date et son message, dans une base locale appelée dépôt (repository).
Les trois zones de travail
Working directory Staging area Dépôt (.git)
(vos fichiers) → (ce qui partira → (l'historique
au prochain commit) permanent)
- Le working directory : vos fichiers tels qu'ils sont sur le disque.
- La zone de staging : l'ensemble exact des modifications que vous décidez d'enregistrer.
- Le dépôt : la chaîne des commits déjà enregistrés.
Ce découpage est la clé de Git : on choisit précisément ce qui entre dans chaque commit.
Un commit, c'est quoi
Un commit est une photo complète du projet, accompagnée de métadonnées :
- un identifiant unique (le hash) ;
- une référence vers le commit parent (la photo précédente) ;
- un auteur et une date ;
- un message expliquant le pourquoi.
A ← B ← C ← D (D est le dernier commit ; main pointe vers D)
L'historique forme une chaîne : chaque commit connaît son parent. Revenir en arrière, c'est simplement se déplacer dans cette chaîne — rien n'est jamais perdu.
Git est distribué
Votre dépôt complet vit sur votre machine : vous pouvez versionner sans connexion. Un remote (par exemple GitHub) n'est qu'une copie synchronisée pour partager le travail. Nous y reviendrons après avoir maîtrisé le local.
Exercice
- Avec vos propres mots, expliquez la différence entre working directory et zone de staging.
- Dessinez la chaîne de commits après 3 commits successifs.
- Que contient selon vous le hash d'un commit ? Pourquoi deux commits ne peuvent pas partager le même hash ?
Résumé
- Git = historique complet, local, distribué.
- Trois zones : fichiers → staging → dépôt.
- Commit = photo signée, datée, chaînée à son parent.
Correction disponibleCherchez d’abord par vous-même.Voir la correction
Correction
Réponses détaillées
Question 1. Le working directory reflète votre travail courant ; la staging area est la sélection explicite des changements qui composeront le prochain commit. On peut modifier dix fichiers mais n'en committer que deux.
Question 2.
C1 ← C2 ← C3 main → C3
Question 3. Le hash est calculé sur le contenu du commit (arborescence + métadonnées + parent). Modifier un seul octet change le hash : c'est cette propriété qui rend l'historique infalsifiable et garantit l'unicité.