Arc 1 Quête 04

L'Archive est Partout

Git local, .git/, clone, bare repo

Tu retrouves le Maître Archiviste dans une salle inhabituelle. Pas de rayonnages, pas de parchemins empilés. Juste une table vide et une bougie. Il te regarde avec un sourire énigmatique.

« Jeune Archiviste, tu as appris à sceller des parchemins dans l'Archive. Mais dis-moi... où se trouve l'Archive exactement ? »

Tu pointes du doigt la grande salle centrale de la Citadelle. Le Maître secoue la tête.

« Non. L'Archive n'est pas un lieu. L'Archive est partout. Chaque copie du savoir EST l'Archive. Il n'y a pas de salle centrale. Chaque Archiviste porte toute l'histoire avec lui. C'est le secret de Git. »

Git n'a besoin d'aucun serveur

C'est le malentendu le plus répandu chez les débutants : beaucoup pensent que Git = GitHub. Que pour utiliser Git, il faut un compte en ligne, un serveur, une connexion internet.

Git = GitHub est un malentendu. Git est un outil distribué et local - il fonctionne entièrement sur ta machine, sans aucun serveur.

C'est faux.

Git est un outil local. Il fonctionne entièrement sur ta machine, sans aucune connexion réseau. Tout ce dont Git a besoin tient dans un seul dossier : .git/.

Explorer le dossier .git/

Quand tu fais git init, Git crée un dossier caché .git/ à la racine de ton projet. C'est là que tout est stocké. Voici sa structure :

.git/
  objects/ ← les données (commits, fichiers compressés)
  refs/ ← les branches et tags
    heads/ ← les branches locales
    tags/ ← les tags
  hooks/ ← scripts automatiques
  HEAD ← « où suis-je maintenant ? »
  config ← configuration locale du repo
  index ← zone de transit (staging area)

Pour explorer ce dossier toi-même :

ls -la .git/          # Linux / macOS / Git Bash
Get-ChildItem .git\ -Force   # PowerShell

Tout Git, c'est ce dossier .git/. Supprime-le et ton repo disparaît - tu ne gardes que les fichiers de travail, mais tout l'historique est perdu. Copie ce dossier ailleurs, et tu as un clone complet.

Clone local - Sans internet

Puisque Git est entièrement local, tu peux cloner un repo sans aucune connexion internet. Il suffit de pointer vers un dossier sur ta propre machine :

# Depuis le dossier parent qui contient mon-archive/
git clone ./mon-archive ./ma-copie

# Vérifie que l'historique est identique
cd ma-copie
git log --oneline
# Depuis le dossier parent qui contient mon-archive\
git clone .\mon-archive .\ma-copie

cd ma-copie
git log --oneline

La commande git clone crée automatiquement une remote nommée origin qui pointe vers la source du clone. Ici, origin pointe vers ../mon-archive - un simple chemin sur ton disque, pas une URL internet.

Bare repo - Un repo sans espace de travail

Un bare repo est un repo qui contient uniquement le contenu de .git/ - pas de fichiers de travail. C'est le format utilisé par les serveurs Git.

# Créer un bare repo
git init -b main --bare ./archive-centrale.git

# Ajouter comme remote et pousser
cd mon-archive
git remote add origin ../archive-centrale.git
git push origin main
# Créer un bare repo
git init -b main --bare .\archive-centrale.git

# Ajouter comme remote et pousser
cd mon-archive
git remote add origin ..\archive-centrale.git
git push origin main

C'est exactement ce que fait un serveur Git. Quand tu fais git push vers GitHub, tu envoies tes commits vers un bare repo hébergé sur leurs serveurs. Rien de magique.

L'architecture en action

Voici comment les trois repos interagissent :

📂 mon-archive/ Repo de travail original
.git/ + fichiers
git push
🏛️ archive-centrale.git Bare repo (serveur)
Pas de fichiers de travail
git clone
📂 clone-depuis-bare/ Clone depuis le bare
.git/ + fichiers

Les trois repos contiennent le même historique. Chaque copie est autonome.

Démystification des plateformes

GitHub, GitLab, Forgejo, Bitbucket... sont des serveurs qui hébergent des bare repo et y ajoutent une interface web.

Fonctionnalité Git Plateforme
Commits, branches, historique
Push, pull, clone
Issues (tickets de bugs)
Pull Requests / Merge Requests
CI/CD (tests automatiques)
Wiki intégré
Interface web pour le code

Tu n'as pas besoin d'un compte GitHub pour utiliser Git. Tu n'as pas besoin d'internet pour faire des commits. Un dossier partagé, une clé USB ou un serveur SSH suffisent pour collaborer.

Exercice pratique

Crée trois copies d'un même repo et vérifie qu'elles partagent le même historique.

  1. git clone mon-archive/ vers ma-copie/
  2. Crée un bare repo archive-centrale.git
  3. Ajoute-le comme remote dans mon-archive/ et pousse
  4. git clone depuis le bare repo vers clone-depuis-bare/
  5. Vérifie que les 3 ont le même historique avec git log --oneline
  6. Lance le script de vérification

Prérequis

Tu as besoin du repo mon-archive/ de la quête 03. Si tu ne l'as pas :

mkdir mon-archive && cd mon-archive
git init -b main
echo "Bienvenue dans l'Archive" > README.md
git add README.md
git commit -m "Premier parchemin"
cd ..

Les commandes

# 1. Clone local
git clone ./mon-archive ./ma-copie

# 2. Bare repo
git init -b main --bare ./archive-centrale.git

# 3. Ajouter la remote et pousser
cd mon-archive
git remote add origin ../archive-centrale.git
git push origin main
cd ..

# 4. Clone depuis le bare repo
git clone ./archive-centrale.git ./clone-depuis-bare

# 5. Vérifier l'historique
cd mon-archive && git log --oneline && cd ..
cd ma-copie && git log --oneline && cd ..
cd clone-depuis-bare && git log --oneline && cd ..

Vérification

bash verifier.sh
.\verifier.ps1

Le Maître Archiviste te regarde avec fierté.

« Tu comprends maintenant le véritable pouvoir de l'Archive. Elle ne dépend d'aucune tour, d'aucun serveur, d'aucune plateforme. Chaque copie est complète. Chaque Archiviste est autonome. Dans la prochaine quête, nous explorerons les Lignes du Temps - tu apprendras à naviguer dans l'historique de l'Archive. »