DevOpsFacile
AccueilParcours de formationCertificationsModulesCheat SheetÀ Propos
DevOpsFacile

Une plateforme d'apprentissage complète pour maîtriser les pratiques DevOps modernes, du débutant à l'expert.

contact@devopsfacile.fr

Formation

  • Parcours de formation
  • Modules

Informations

  • À Propos
  • Conditions d'utilisation
  • Confidentialité
  • Mentions légales

© 2026 DevOps Facile. Tous droits réservés.

Fait avec pour la communauté DevOps

ModulesDébuter avec Git : commits, branches et premier repo05 - Collaboration en Équipe

Détails

  • 40 minutes
  • Intermédiaire

Objectifs

  • Simuler le travail d'équipe
  • Pratiquer les Pull Requests
  • Code review
  • Résoudre les changements parallèles
Module Débuter avec Git : commits, branches et premier repo

Exercice 05 : Collaboration en Équipe

🎯 Objectifs

À la fin de cet exercice, vous serez capable de :

  • ✅ Simuler un workflow d'équipe avec Git
  • ✅ Créer des branches de fonctionnalités
  • ✅ Créer et réviser des Pull Requests
  • ✅ Gérer les feedback et les changements
  • ✅ Merger du code en équipe
  • ✅ Maintenir un historique propre

Durée estimée : 40 minutes

Difficulté : ⭐⭐⭐☆☆ (Intermédiaire)

Prérequis :

  • Avoir complété Exercice 01-04 (Git, branches, GitHub)

📖 Contexte

Dans un vrai projet DevOps, vous ne changez jamais main directement. Au lieu de cela :

  1. Créez une branche pour votre fonctionnalité
  2. Poussez la branche vers GitHub
  3. Créez une Pull Request (demande de fusion)
  4. Demandez une review à un collègue
  5. Ils révisent et donnent du feedback
  6. Vous faites les changements si nécessaire
  7. Ils approuvent et vous mergez

C'est le workflow professionnel que vous verrez partout.


📋 Énoncé

Vous allez simuler une équipe de 2 personnes :

Alice (vous) :

  • Crée une branche feature/logging
  • Ajoute un système de logging
  • Crée une Pull Request

Bob (simulé par vous) :

  • Revoit le code
  • Suggère des changements
  • Approuve la PR

Résultat :

  • Code merged proprement avec historique
  • Messages de commit clairs
  • Processus de review simul é

🔧 Matériel Nécessaire

  • Repository GitHub : Celui créé à l'Exercice 04
  • 2 clones locaux : Pour simuler 2 développeurs
  • Terminal : Accès à Git
  • GitHub.com : Créer une PR via l'interface
  • Temps : 60 minutes

🧭 Déroulement de l'exercice

Voici les grandes étapes à réaliser dans l'ordre. Chaque étape décrit ce que vous devez accomplir - à vous de trouver la commande. La solution complète est disponible si vous êtes bloqué.

Tâche 1 : Préparer deux clones (Alice et Bob)

Clonez votre repository deux fois dans des dossiers séparés : un pour Alice, un pour Bob. Ces deux dossiers simulent deux développeurs sur deux machines différentes.

Indice : Créez d'abord un dossier git-team-exercise/ puis clonez deux fois dedans avec des noms de destination différents.

Vérification : Les deux dossiers doivent avoir le même git log --oneline et le remote origin correctement configuré.


Tâche 2 : Alice crée une branche feature et développe

Depuis le clone d'Alice, créez une branche feature/logging et ajoutez un fichier logger.py avec un système de logging basique. Faites au moins 1 commit.

Indice : La convention feature/nom est une bonne pratique d'équipe. Les commits doivent avoir des messages clairs décrivant ce qui a été ajouté.

Vérification : git log --oneline depuis la branche feature doit montrer le nouveau commit.


Tâche 3 : Alice pousse sa branche sur GitHub

Poussez la branche feature/logging vers GitHub. La branche n'existe pas encore sur le remote - il faut le préciser.

Indice : Pour pousser une nouvelle branche, il faut indiquer à Git où elle doit aller sur le remote avec --set-upstream (ou -u).

Vérification : La branche feature/logging doit apparaître dans l'onglet "Branches" de votre repository GitHub.


Tâche 4 : Créer une Pull Request

Depuis GitHub.com, créez une Pull Request pour fusionner feature/logging dans main. Rédigez un titre clair et une description qui explique ce que fait ce changement.

Indice : GitHub propose automatiquement de créer une PR quand il détecte une branche récemment poussée. Sinon, utilisez l'onglet "Pull requests" > "New pull request".

Vérification : La PR doit apparaître dans l'onglet "Pull requests" avec le statut "Open".


Tâche 5 : Bob fait une code review

Depuis le clone de Bob, récupérez les dernières branches distantes. Ensuite, depuis GitHub.com, faites une review de la PR : ajoutez au moins 1 commentaire sur une ligne de code spécifique et demandez une modification.

Indice : Bob doit faire git fetch pour voir les nouvelles branches. Sur GitHub, lors d'une review, vous pouvez commenter une ligne précise en cliquant sur le + qui apparaît à gauche.

Vérification : La PR doit afficher un commentaire de review avec le statut "Changes requested".


Tâche 6 : Alice répond au feedback et met à jour

Depuis le clone d'Alice, faites les modifications demandées par Bob et poussez un nouveau commit sur la même branche.

Indice : De nouveaux commits sur une branche source mettent automatiquement à jour la Pull Request sur GitHub. Pas besoin de recréer la PR.

Vérification : La PR sur GitHub doit montrer le nouveau commit d'Alice, et le commentaire de Bob doit être résolvable.


Tâche 7 : Merger la Pull Request

Bob approuve la PR et la merge dans main. Choisissez l'option "Create a merge commit".

Indice : GitHub propose 3 options de merge : merge commit (préserve l'historique), squash (compresse en un seul commit), rebase (rejoue les commits). Pour cet exercice, le merge commit est le plus pédagogique.

Vérification : La PR doit passer en statut "Merged". git pull depuis main doit récupérer les changements.


� Mini-Projet : Contribuer à un projet partagé

Vous allez simuler un cycle complet de contribution professionnel : branche → développement → PR → review → merge → synchronisation.

Scénario : Vous travaillez sur un projet devops-wiki avec une collègue. Elle a déjà commencé - vous devez ajouter une page sur Docker tout en gérant une review.

Ce que vous devez réaliser :

  1. Clonez votre repository devops-portfolio dans deux dossiers : dev-alice et dev-bob
  2. Depuis dev-alice : créez une branche feature/docker-page, ajoutez un fichier docker.md avec au moins 5 lignes de contenu, poussez la branche
  3. Depuis dev-alice : créez une Pull Request vers main avec un titre et une description clairs
  4. Depuis dev-bob : récupérez les branches distantes et examinez le code de la PR sur GitHub
  5. Depuis GitHub : ajoutez un commentaire de review sur une ligne du fichier et demandez une modification
  6. Depuis dev-alice : implémentez la modification demandée, committez et poussez
  7. Depuis GitHub : approuvez la PR et mergez
  8. Depuis dev-bob : synchronisez main avec le remote

Checkpoints de validation :

  • La PR apparaît en statut "Merged" dans l'onglet Pull Requests de GitHub
  • docker.md est présent dans main sur GitHub
  • La PR affiche au moins 2 commits (initial + réponse au feedback)
  • git log --oneline main dans dev-bob (après git pull) contient le commit de merge
  • L'historique GitHub montre clairement qui a committé quoi
  • Les branches feature/docker-page (locale et distante) ont été supprimées après merge

�📚 Étapes Détaillées

Étape 1 : Préparer Deux Clones

Objectif : Simuler deux développeurs avec deux dossiers

Instructions:

  1. Allez dans un dossier temporaire :
bash
mkdir ~/git-team-exercise
cd ~/git-team-exercise
  1. Créer le clone "Alice" :
bash
git clone git@github.com:USERNAME/ma-premiere-app.git alice
cd alice
  1. Créer le clone "Bob" (retour au parent d'abord) :
bash
cd ..
git clone git@github.com:USERNAME/ma-premiere-app.git bob

Résultat :

git-team-exercise/
├── alice/
│   ├── .git/
│   ├── ma-premiere-app/
│   └── ... (tous les fichiers)
└── bob/
    ├── .git/
    ├── ma-premiere-app/
    └── ... (tous les fichiers)

Étape 2 : Alice Crée une Branche de Fonctionnalité

Objectif : Alice commence à travailler sur une nouvelle feature

Instructions:

  1. Allez dans le dossier d'Alice :
bash
cd alice
  1. Vérifier la branche actuelle :
bash
git branch

Résultat attendu :

* main
  1. Créer et basculer vers une branche feature :
bash
git checkout -b feature/logging
  1. Vérifier :
bash
git branch

Résultat attendu :

* feature/logging
  main

Étape 3 : Alice Ajoute du Code

Objectif : Alice écrit la nouvellfonctionnalité

Instructions:

  1. Créer un fichier logging.py :
bash
cat > logging.py << 'EOF'
import logging
from datetime import datetime

def setup_logging(log_level=logging.INFO):
    """Configure le système de logging pour l'application."""
    logger = logging.getLogger(__name__)
    logger.setLevel(log_level)
    
    # Formatteur
    formatter = logging.Formatter(
        '%(asctime)s - %(name)s - %(levelname)s - %(message)s'
    )
    
    # Handler fichier
    file_handler = logging.FileHandler('app.log')
    file_handler.setFormatter(formatter)
    logger.addHandler(file_handler)
    
    # Handler console
    console_handler = logging.StreamHandler()
    console_handler.setFormatter(formatter)
    logger.addHandler(console_handler)
    
    return logger

def log_info(message):
    """Log un message d'information."""
    logger = logging.getLogger(__name__)
    logger.info(message)

if __name__ == "__main__":
    logger = setup_logging()
    logger.info("Système de logging initialisé")
EOF
  1. Vérifier le fichier :
bash
cat logging.py
  1. Ajouter et committer :
bash
git add logging.py
git commit -m "Ajouter module de logging

- Configuration centralisée du logging
- Sortie vers fichier et console
- Utilise le standard logging Python"

Résultat attendu :

[feature/logging 2a3b4c5] Ajouter module de logging
 1 file changed, 35 insertions(+)
 create mode 100644 logging.py

Étape 4 : Alice Ajoute des Tests

Objectif : Alice ajoute des tests pour son code

Instructions:

  1. Créer un fichier test_logging.py :
bash
cat > test_logging.py << 'EOF'
import logging
from logging_module import setup_logging

def test_logging_setup():
    """Vérifier que le logging s'initialise correctement."""
    logger = setup_logging()
    assert logger is not None
    assert logger.level == logging.INFO
    print("✓ Test: logging setup OK")

def test_log_levels():
    """Vérifier les différents niveaux de log."""
    logger = setup_logging(logging.DEBUG)
    assert logger.level == logging.DEBUG
    print("✓ Test: log levels OK")

if __name__ == "__main__":
    test_logging_setup()
    test_log_levels()
    print("\nTous les tests passent!")
EOF
  1. Ajouter et committer :
bash
git add test_logging.py
git commit -m "Ajouter tests unitaires pour le module de logging

- Test de la configuration
- Test des niveaux de log
- Tous les tests passent"

Étape 5 : Alice Pousse la Branche

Objectif : Envoyer la branche vers GitHub

Instructions:

  1. Vérifier les commits locaux :
bash
git log --oneline -3
  1. Pousser la branche :
bash
git push origin feature/logging

Résultat attendu :

Enumerating objects: 6, done.
Counting objects: 100% (6/6), done.
Delta compression using up to 2 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (2/2), 2.45 KiB | 2.45 MiB/s, done.
Total 6 (delta 1), reused 0 (delta 0), reused 1 (delta 0)
remote: Reviewable
To github.com:username/ma-premiere-app.git
 * [new branch]      feature/logging -> feature/logging

Étape 6 : Créer une Pull Request sur GitHub

Objectif : Alice demande une review

Instructions:

  1. Aller sur GitHub.com
  1. Allez dans le repository et vous devriez voir une notification :
  • "feature/logging had recent pushes"
  • Bouton "Compare & pull request"
  1. Cliquer le bouton
  1. Remplir la PR :
  • Title : "Ajouter système de logging"
  • Description :
## Description

Ajoute un module de logging centralisé pour l'application.

## Changements

- Créé `logging.py` avec configuration centralisée
- Logs vers fichier et console avec niveau configurable
- Ajouté tests unitaires dans `test_logging.py`

## Checklist

- [x] Code testé localement
- [x] Tests unitaires passent
- [x] Pas de conflits
- [x] Messages de commit clairs

@username Peux-tu réviser?
  1. Cliquer "Create pull request"

Résultat :

  • PR créée et visible
  • Numéro de PR (ex: #1)
  • Section "Conversation" visible

Étape 7 : Bob Revoit la PR

Objectif : Simuler un collègue qui revoit le code

Instructions:

  1. Aller dans le dossier de Bob :
bash
cd ../bob
  1. Récupérer les derniers changements :
bash
git fetch origin
  1. Voir la branche :
bash
git branch -r

Résultat attendu :

  origin/feature/logging
  origin/main
  1. Sur GitHub, cliquer sur la PR créée
  1. Cliquer sur l'onglet "Files changed"
  1. Cliquer sur une ligne de code pour ajouter un commentaire

Étape 8 : Alice Répond aux Commentaires

Objectif : Itération et feedback

Instructions:

Dans cet exercice, supposons que Bob a demandé :

"Peux-tu ajouter un exemple dans le README sur comment utiliser le logging?"

  1. Retour à Alice :
bash
cd ../alice
  1. Vérifier que vous êtes sur la bonne branche :
bash
git branch

Résultat attendu :

* feature/logging
  main
  1. Ajouter une section au README :
bash
echo "

## Utilisation du Logging

\`\`\`python
from logging import setup_logging

# Configuration
logger = setup_logging()

# Utilisation
logger.info('Application démarrée')
logger.warning('Attention: espace disque faible')
logger.error('Erreur de connexion à la BD')
\`\`\`
" >> README.md
  1. Ajouter et committer :
bash
git add README.md
git commit -m "Ajouter exemple de logging au README

Répond au feedback de la review:
- Montre comment utiliser le module de logging
- Exemple avec différents niveaux"
  1. Pousser le changement :
bash
git push origin feature/logging

La PR se met à jour automatiquement !


Étape 9 : Merger la PR

Objectif : Finaliser la fusion

Instructions:

  1. Sur GitHub, allez à la PR
  1. Vérifier que :
  • ✅ Pas de conflits ("This branch has no conflicts with main")
  • ✅ Tous les tests passent
  • ✅ Code révisé et approuvé
  1. Cliquer "Merge pull request"
  1. Choisir le type de merge (normalement "Create a merge commit")
  1. Cliquer "Confirm merge"

Résultat :

  • PR mergée
  • Bouton "Delete branch" apparaît
  • Vous pouvez supprimer la branche distante
  1. Cliquer "Delete branch" (pour nettoyer)

Étape 10 : Synchroniser Localement

Objectif : Les développeurs récupèrent les nouveaux changements

Instructions (pour Alice) :

  1. Allez dans le dossier d'Alice :
bash
cd ../alice
  1. Vérifier main :
bash
git checkout main
  1. Récupérer les changements :
bash
git pull origin main

Résultat attendu :

From github.com:username/ma-premiere-app
 * branch            main     -> FETCH_HEAD
Updating 6a2b5c8..8b7c1d9
Fast-forward
 README.md      | 15 +++++++++++++++
 logging.py     | 35 ++++++++++++++++++++++++++++++++++
 test_logging.py | 18 ++++++++++++++++++
 3 files changed, 68 insertions(+)
  1. Vérifier les fichiers :
bash
ls -la
cat logging.py

Les fichiers sont maintenant dans main !

Instructions (pour Bob) :

bash
cd ../bob
git checkout main
git pull origin main

Les deux clones sont maintenant synchronisés.


✅ Vérification du Résultat

Pour vérifier que vous avez réussi :

bash
# Vérifier la PR mergée sur GitHub
# Aller sur github.com/USERNAME/ma-premiere-app/pulls
# La PR #1 devrait être fermée (merged)

# Vérifier l'historique
cd alice
git log --oneline --graph | head -10
# Devrait montrer les commits de Alice et le merge commit

# Vérifier les fichiers
ls -la
# logging.py, test_logging.py devraient être présents

Checklist finale :

  • ✅ Branche feature créée et poussée
  • ✅ Pull Request créée sur GitHub
  • ✅ Code révisé et amélioré
  • ✅ PR mergée avec succès
  • ✅ Historique propre sur main
  • ✅ Synchronisation réussie dans les deux clones

🎮 Défi Bonus

Défi 1 : Pratiquer avec une vraie équipe

bash
# Demander à un ami de:
# 1. fork votre repo
# 2. Créer une branche
# 3. Faire des changements
# 4. Créer une PR vers votre repo
# Vous pouvez alors accorder l'accès ou gérer les PRs

Défi 2 : Ajouter des branches de protection

bash
# Sur GitHub, Settings → Branches → Branch protection rules
# Require pull request reviews
# Dismiss stale pull request approvals
# Require status checks to pass
# Restrict who can push to matching branches

Défi 3 : Utiliser github.com à travers les commandes CLI

bash
# GitHub CLI (gh)
# Installer: https://cli.github.com

gh pr create --title "Test PR" --body "Description"
gh pr view 1
gh pr merge 1

💡 Points Clés à Retenir

  1. Pull Request = Demande de fusion (avec review)
  2. Feature branch = Branche pour chaque nouvelle fonctionnalité
  3. Code review = Processus d'apprentissage et de qualité
  4. Merge commit = Enregistre clairement la fusion
  5. Protection de main = main ne doit changer que via PR

🎯 Prochaines Étapes

  • ✅ Vous comprenez le workflow d'équipe professionnel
  • 🔜 Exercice suivant : Projet capstone (intégration complète)
  • 🚀 Index des exercices : Tous les exercices

Excellent ! Vous êtes prêt pour le travail en équipe ! 🚀

Retour au module

Sur cette page

  • 🎯 Objectifs
  • 📖 Contexte
  • 📋 Énoncé
  • 🔧 Matériel Nécessaire
  • 🧭 Déroulement de l'exercice
  • Tâche 1 : Préparer deux clones (Alice et Bob)
  • Tâche 2 : Alice crée une branche feature et développe
  • Tâche 3 : Alice pousse sa branche sur GitHub
  • Tâche 4 : Créer une Pull Request
  • Tâche 5 : Bob fait une code review
  • Tâche 6 : Alice répond au feedback et met à jour
  • Tâche 7 : Merger la Pull Request
  • � Mini-Projet : Contribuer à un projet partagé
  • �📚 Étapes Détaillées
  • Étape 1 : Préparer Deux Clones
  • Étape 2 : Alice Crée une Branche de Fonctionnalité
  • Étape 3 : Alice Ajoute du Code
  • Étape 4 : Alice Ajoute des Tests
  • Étape 5 : Alice Pousse la Branche
  • Étape 6 : Créer une Pull Request sur GitHub
  • Description
  • Changements
  • Checklist
  • Étape 7 : Bob Revoit la PR
  • Étape 8 : Alice Répond aux Commentaires
  • Utilisation du Logging
  • Étape 9 : Merger la PR
  • Étape 10 : Synchroniser Localement
  • ✅ Vérification du Résultat
  • 🎮 Défi Bonus
  • 💡 Points Clés à Retenir
  • 🎯 Prochaines Étapes