Exercice 07 : Projet Capstone - Collaborer sur un Projet Open Source avec GitHub
🎯 Objectifs
À la fin de cet exercice, vous serez capable de :
- ✅ Forker un dépôt GitHub et configurer les remotes
originetupstream - ✅ Mettre de côté un travail en cours avec
git stash - ✅ Synchroniser votre fork avec
git pull --rebase - ✅ Créer une Pull Request soignée sur GitHub
- ✅ Résoudre un conflit lors d'un rebase interactif
- ✅ Créer un tag de version et pousser les contributions
Durée estimée : 45 minutes
Difficulté : ⭐⭐⭐⭐☆ (Avancé)
Prérequis :
- Avoir complété les exercices 01 à 05
- Module Git Intermédiaire complété (remotes, PR, stash, rebase, tags)
- Un compte GitHub configuré avec accès SSH ou HTTPS
📖 Contexte
Cet exercice simule une contribution à un projet d'équipe hébergé sur GitHub. Vous allez forker le repository de votre portfolio DevOps (créé dans le capstone précédent), y apporter des améliorations en suivant un workflow collaboratif professionnel, et proposer une Pull Request.
Cet exercice mobilise toutes les compétences du module :
- Remotes
origin/upstream git stash/git stash popgit rebaseet résolution de conflits- Création et review de Pull Requests
git tagannoté
📋 Énoncé
Vous contribuez à un projet partagé. Travaillez sur une nouvelle fonctionnalité, synchronisez-vous avec les changements en amont, et proposez une Pull Request propre.
🧭 Déroulement de l'exercice
Tâche 1 : Forker et configurer les remotes
Depuis GitHub, forkez le repository devops-portfolio de votre compte vers un second compte (ou utilisez le repository d'un collègue). Clonez votre fork en local et configurez le remote upstream pointant vers le dépôt d'origine.
Indice :
git clone <URL-de-votre-fork>, puisgit remote add upstream <URL-du-repo-original>. Vérifiez avecgit remote -v: vous devez voirorigin(votre fork) etupstream(l'original).
Vérification : git remote -v liste deux remotes : origin et upstream.
Tâche 2 : Créer une branche de contribution
Créez une branche feature/cv-section et commencez à ajouter un fichier cv.md avec une section "Formation". Après 1 commit, interrompez-vous : une urgence sur main vous oblige à changer de contexte. Mettez en attente votre travail avec git stash.
Indice :
git switch -c feature/cv-section, faites votre premier commit, puisgit stash -m "WIP: ajouter section formation dans cv.md". Vérifiez que votre répertoire de travail est propre avecgit status.
Vérification : git stash list doit afficher votre entrée. git status doit afficher "nothing to commit".
Tâche 3 : Gérer l'urgence sur main et récupérer votre travail
Sur main, corrigez rapidement une faute de frappe dans README.md (ajoutez un commit de correction). Revenez ensuite sur feature/cv-section et restaurez votre travail avec git stash pop. Terminez le fichier cv.md en ajoutant une section "Expérience" et faites un second commit.
Indice :
git switch mainpour l'urgence, puisgit switch feature/cv-sectionetgit stash poppour reprendre.git stash popapplique le dernier stash ET le supprime de la liste.
Vérification : git stash list doit être vide. git log --oneline feature/cv-section doit afficher 2 commits (+ le commit initial).
Tâche 4 : Synchroniser avec l'upstream et rebaser
L'auteur du dépôt original a entre-temps ajouté un commit dans main. Récupérez ses changements avec git fetch upstream, puis rebasez votre branche feature/cv-section sur upstream/main.
Pour simuler un changement en amont : ajoutez directement un commit dans le dépôt original (ou faites un commit dans main de votre clone upstream), puis rapatriez-le.
Indice :
git fetch upstreamrécupère sans merger.git rebase upstream/maindéplace vos commits par-dessus les commits upstream. Si un conflit apparaît, résolvez-le,git add, puisgit rebase --continue.
Vérification : git log --oneline --graph doit montrer votre branche linéaire au-dessus des commits upstream, sans commit de merge parasite.
Tâche 5 : Pousser et créer une Pull Request
Poussez votre branche feature/cv-section sur votre fork (origin). Créez ensuite une Pull Request sur GitHub de votre fork vers le dépôt original, avec :
- Un titre clair :
feat: ajouter section CV avec formation et expérience - Une description expliquant les changements apportés
- Au moins un label (par ex.
enhancement)
Indice :
git push origin feature/cv-section. Sur GitHub, le bouton "Compare & pull request" apparaît automatiquement. La base doit être le dépôt original, la comparaison votre fork.
Vérification : La PR apparaît dans l'onglet "Pull requests" du dépôt original. La branche est linéaire (pas de merge commits inutiles grâce au rebase).
Tâche 6 : Créer un tag de version après le merge
Une fois la PR mergée (simulez le merge directement sur GitHub ou localement), créez un tag annoté v2.0.0 sur main marquant cette version avec le CV ajouté. Poussez le tag.
Indice :
git switch main && git pull upstream main, puisgit tag -a v2.0.0 -m "Release v2.0.0 - ajout section CV". Pousser avecgit push origin v2.0.0.
Vérification : git tag liste v2.0.0. Sur GitHub, l'onglet "Tags" ou "Releases" affiche le tag.
🗂️ Mini-Projet : Workflow de contribution complet
Vérifiez l'état final de votre dépôt :
# État des remotes
git remote -v
# Branches locales et distantes
git branch -a
# Historique linéaire
git log --oneline --graph main
# Tags créés
git tag -l
# Stash vide (travail terminé)
git stash list
# Vérifier que cv.md est dans main
cat cv.mdCheckpoints de validation :
git remote -vlisteoriginetupstreamgit log --oneline --graphest linéaire (pas de merge commits parasites grâce au rebase)git stash listest videcv.mdcontient les deux sections "Formation" et "Expérience"git tagretournev2.0.0- La Pull Request est visible sur GitHub