Les Portails Distants
Remote, push, fetch et pull
Le Maître Archiviste t'emmène dans une salle que tu n'avais jamais remarquée. Les murs sont couverts de miroirs immenses, mais chacun montre un lieu différent - une citadelle dans les montagnes, un avant-poste au bord de la mer, une bibliothèque souterraine. Au centre de chaque miroir, une lumière dorée pulse doucement.
« Apprenti, tu as appris à créer des branches, à fusionner des timelines, et à résoudre les conflits entre elles. Mais tu as toujours travaillé seul, dans ta propre citadelle. Or, les Archives de la Guilde ne vivent pas dans un seul lieu. Regarde ces miroirs - ce sont des Portails Distants. Chacun relie notre citadelle à un avant-poste de la Guilde, quelque part dans le royaume. À travers ces portails, les Archivistes envoient leurs chroniques et reçoivent celles des autres. Aujourd'hui, tu vas apprendre à maîtriser ces portails. »
Qu'est-ce qu'un remote ?
Un remote (ou dépôt distant) est un autre dépôt Git auquel le tien est connecté. C'est un portail vers une copie des Archives qui vit ailleurs - sur un serveur, sur la machine d'un collègue, ou même dans un autre dossier de ta propre machine.
Quand tu as fait git clone dans la quête 04, Git a automatiquement créé un remote nommé origin qui pointait vers le dépôt source. C'était ton premier portail, même si tu ne le savais pas encore.
Lister les remotes
Pour voir quels portails sont configurés dans ton dépôt :
git remote -v Le -v (verbose) affiche les URLs associées :
origin /chemin/vers/depot.git (fetch)
origin /chemin/vers/depot.git (push) Chaque remote a deux lignes : une pour fetch (recevoir) et une pour push (envoyer). En général, elles pointent vers le même endroit.
Ajouter un remote
Pour ouvrir un nouveau portail vers un autre dépôt :
git remote add <nom> <url> Exemple :
git remote add origin /tmp/portail-central.git Par convention :
originest le remote principal (créé automatiquement par git clone)- Tu peux ajouter autant de remotes que tu veux avec les noms de ton choix
Envoyer des commits : git push
Pour envoyer tes commits à travers un portail :
git push <remote> <branche> Exemple :
git push origin main Cela envoie tous les commits de ta branche main qui n'existent pas encore sur le remote origin.
Configurer le suivi avec -u
La première fois que tu pousses une branche, tu peux configurer le suivi (tracking) :
git push -u origin main L'option -u (ou --set-upstream) crée un lien permanent entre ta branche locale main et la branche main du remote origin. Après cela, tu pourras simplement écrire :
git push Sans préciser le remote ni la branche - Git saura où envoyer.
Récupérer les changements : fetch vs pull
C'est l'une des distinctions les plus importantes à comprendre.
git fetch - Observer sans toucher
git fetch <remote> git fetch télécharge les nouveaux commits depuis le remote, mais ne modifie rien dans ton travail. Les changements sont stockés dans les branches de suivi (comme origin/main), pas dans tes branches locales.
git fetch, c'est comme regarder à travers le portail pour voir ce que les autres Archivistes ont fait, sans toucher à tes propres parchemins.
git pull - Récupérer et fusionner
git pull <remote> <branche> git pull fait deux choses en une seule commande :
- git fetch - télécharge les nouveaux commits
- git merge - fusionne les changements dans ta branche courante
C'est comme ouvrir le portail, attraper les parchemins, et les intégrer directement dans ta chronique.
Quand utiliser l'un ou l'autre ?
| Situation | Commande | Pourquoi |
|---|---|---|
| Tu veux voir ce qui a changé avant de décider | git fetch | Tu gardes le contrôle total |
| Tu veux récupérer et intégrer immédiatement | git pull | Plus rapide, moins de contrôle |
| Tu travailles sur une branche sensible | git fetch + git merge | Tu inspectes avant de fusionner |
| Tu es seul sur la branche | git pull | Pas de risque de conflit surprise |
En règle générale : git fetch suivi d'un examen puis d'un git merge est la méthode la plus sûre. git pull est un raccourci pratique quand tu es sûr que tout ira bien.
Les branches de suivi
Quand tu fais git fetch, les commits récupérés sont stockés dans des branches de suivi (tracking branches). Ce sont des branches en lecture seule qui reflètent l'état d'un remote.
# Voir toutes les branches, y compris les branches de suivi
git branch -a Tu verras quelque chose comme :
* main
remotes/origin/main origin/main vs main
main: ta branche locale. C'est là que tu travailles.origin/main(ouremotes/origin/main) : la branche de suivi. C'est la dernière image connue de la branchemainsur le remoteorigin.
# Voir les commits distants non encore fusionnés
git log main..origin/main --oneline
# Fusionner quand tu es prêt
git merge origin/main Supprimer une branche distante
Si une branche n'a plus besoin d'exister sur le remote :
git push <remote> --delete <branche> Exemple :
git push origin --delete ancienne-expedition Cela supprime la branche sur le remote seulement. Ta branche locale n'est pas affectée.
Le workflow recommandé
Voici le flux de travail typique quand tu collabores à travers un portail :
- git fetch - Télécharge les nouveautés
- Examine -
git log main..origin/mainpour voir ce qui a changé - Fusionne ou rebase -
git merge origin/mainougit rebase origin/main - Travaille - Fais tes propres commits
- Pousse - git push pour partager ton travail
Ce cycle se répète tout au long de la collaboration.
Exercice pratique - Le Portail Central
« Un avant-poste de la Guilde vient d'être établi : le Portail Central. Tu vas l'ouvrir, y envoyer tes chroniques, puis découvrir qu'un autre Archiviste a également contribué à travers ce même portail. À toi de récupérer son travail et de l'intégrer au tien. »
Crée un bare repo local, connecte-le comme remote, pousse tes commits, simule un deuxième Archiviste, puis récupère ses changements avec fetch et merge.
Étape 1 - Créer ton dépôt de travail
mkdir portails-distants
cd portails-distants
# Crée ton dépôt de travail
mkdir citadelle
cd citadelle
git init -b main
echo "# Chroniques de la Citadelle" > chroniques.md
git add chroniques.md
git commit -m "Fonder la chronique de la Citadelle"
cd .. Étape 2 - Créer le Portail Central (bare repo)
git init -b main --bare portail-central.git Étape 3 - Ouvrir le portail depuis ta citadelle
cd citadelle
git remote add origin ../portail-central.git
git remote -v
cd .. Étape 4 - Envoyer tes chroniques
cd citadelle
git push -u origin main
cd .. Étape 5 - Un autre Archiviste arrive
# Simuler un deuxième Archiviste
git clone portail-central.git avant-poste
cd avant-poste
echo "Rapport de l'avant-poste : tout est calme aux frontières." >> chroniques.md
git add chroniques.md
git commit -m "Ajouter le rapport de l'avant-poste"
git push origin main
cd .. Étape 6 - Découvrir les changements (fetch)
cd citadelle
git fetch origin
# Examine ce qui a changé
git log main..origin/main --oneline Étape 7 - Intégrer les changements (merge)
git merge origin/main
# Vérifie que le fichier contient les deux contributions
cat chroniques.md Étape 8 - Vérification
Depuis le dossier citadelle/, lance le script de vérification :
bash verifier.sh .\verifier.ps1 Le script vérifie :
- Tu es dans un dépôt Git
- Au moins un remote est configuré
- Tu as poussé au moins une fois vers un remote
- Tu as récupéré des changements depuis un remote
Récapitulatif des commandes
| Commande | Description |
|---|---|
git remote -v | Lister les remotes et leurs URLs |
git remote add <nom> <url> | Ajouter un nouveau remote |
git push <remote> <branche> | Envoyer des commits vers un remote |
git push -u <remote> <branche> | Pousser et configurer le suivi |
git fetch <remote> | Télécharger sans fusionner |
git pull <remote> <branche> | Télécharger et fusionner |
git branch -a | Voir toutes les branches (locales + suivi) |
git log main..<remote>/main | Voir les commits distants non fusionnés |
git push <remote> --delete <branche> | Supprimer une branche distante |
Tu contemples les miroirs de la salle. Chaque portail brille d'une lumière constante - les connexions sont établies, les chroniques circulent librement entre ta citadelle et les avant-postes de la Guilde. Le Maître Archiviste hoche la tête avec satisfaction.
« Tu sais maintenant ouvrir des portails, envoyer tes chroniques à travers le royaume, et recevoir le travail des autres Archivistes. Tu comprends la différence entre observer et intégrer, entre fetch et pull. C'est une compétence essentielle, car un Archiviste qui travaille seul dans sa tour ne sert personne. La vraie puissance vient de la collaboration à travers les portails. »