Outils · Contrôle de version

Git & GitHub
Guide Étudiant

Comprendre les concepts fondamentaux, maîtriser les commandes essentielles et travailler efficacement avec VSCode et GitHub Classroom.

C'est quoi Git ?

🔍 Définition simple

Git est un système de contrôle de version : il enregistre l'historique complet de tes fichiers. Tu peux revenir à n'importe quel état passé, travailler sur plusieurs versions en parallèle (branches) et collaborer avec d'autres sans écraser leur travail.

💡
Imagine Git comme un jeu vidéo avec des sauvegardes illimitées — chaque commit est une sauvegarde. Tu peux charger n'importe quelle sauvegarde à tout moment.
🗺️ Git vs GitHub — la différence
GIT
Outil installé sur ton ordinateur. Gère les versions de tes fichiers localement.
GITHUB
Site web (cloud) qui héberge tes dépôts Git en ligne. Permet la collaboration.

Les 4 zones fondamentales de Git

📐 Architecture de Git — comment tes fichiers voyagent
Zone 1
Working Directory
Tes fichiers tels
que tu les vois
dans l'explorateur
fichiers .py, etc.

git add
Zone 2
Staging Area
Zone de
préparation du
prochain commit
git add

git commit
Zone 3
Dépôt Local
Historique des
commits sur
ton ordinateur
git commit

git push
Zone 4
Dépôt Distant
GitHub — visible
par tous, sauvegarde
en ligne
git push / pull
← sens inverse :
git restore
unstage ·
git pull
récupère du distant
🔄 Cycle de vie d'un fichier
Untrackednouveau fichier
inconnu de Git

git add
Stagedprêt à être
committé

git commit
Committedsauvegardé dans
l'historique

(édition)
Modifiedmodifié depuis
le dernier commit

git add
Stagedde nouveau

Configuration initiale — à faire une seule fois

🔧 Configurer ton identité Git une seule fois
terminal
# 1. Ton nom (apparaîtra dans chaque commit) $ git config --global user.name "Prénom Nom" # 2. Ton email (doit correspondre à ton compte GitHub) $ git config --global user.email "toi@etudiant.be" # 3. Éditeur par défaut (optionnel, évite vim par défaut) $ git config --global core.editor "code --wait" # 4. Vérifier toute la config $ git config --list
L'email doit être identique à celui de ton compte GitHub pour que tes commits t'appartiennent correctement.

Workflow quotidien complet

📁 Démarrer un projet
nouveau projet
# Option A — créer depuis zéro $ mkdir mon-projet $ cd mon-projet $ git init # Option B — cloner un dépôt existant $ git clone https://github.com/user/repo.git $ cd repo # Toujours vérifier l'état au départ $ git status
💾 Sauvegarder son travail (add → commit)
chaque session
# Voir ce qui a changé $ git status $ git diff # voir les lignes modifiées # Stager les fichiers voulus $ git add pokemon.py # fichier précis $ git add . # TOUT ce qui a changé # Committer avec un message clair $ git commit -m "feat: ajoute méthode attaquer()"
🔄 Synchroniser avec GitHub
push / pull
# Envoyer tes commits vers GitHub $ git push # Premier push d'une nouvelle branche $ git push -u origin main # Récupérer les modifications distantes $ git pull # Voir l'état par rapport au distant $ git status # → "Your branch is ahead of 'origin/main' by 1 commit"
📜 Consulter l'historique
git log
# Historique compact $ git log --oneline a3f9c1b feat: ajoute méthode attaquer() 7d2e04f init: structure de base du projet # Historique avec branches visuelles $ git log --oneline --graph --all # Revenir à un commit précédent (lecture seule) $ git checkout a3f9c1b

Branches — travailler en parallèle

🌿 Créer, naviguer et fusionner des branches
branches
# Créer ET basculer (méthode moderne) $ git switch -c feature/combat # Lister toutes les branches $ git branch * feature/combat ← branche active main # Revenir sur main et fusionner $ git switch main $ git merge feature/combat # Supprimer la branche une fois mergée $ git branch -d feature/combat
Pourquoi des branches ? Tu peux travailler sur une nouvelle fonctionnalité sans risquer de casser main. Si ça ne fonctionne pas, tu supprimes simplement la branche.
Un conflit de fusion se produit quand deux branches modifient la même ligne. Git te demandera de choisir quelle version garder — éditez le fichier, puis git add + git commit.

Messages de commit — conventions et bonnes pratiques

✍️ Convention Conventional Commits standard industrie
format
# Structure : type(portée): description courte feat: ajoute la classe Pokemon fix: corrige le calcul des points de vie refactor: renomme attaque en attaquer docs: ajoute docstrings à la classe Arena test: ajoute tests unitaires pour Pokemon # ❌ À éviter absolument git commit -m "modif" git commit -m "ça marche" git commit -m "wip"
feat:
Nouvelle fonctionnalité
feat: ajoute méthode soigner()
fix:
Correction d'un bug
fix: corrige division par zéro
refactor:
Réécriture sans changer le comportement
refactor: simplifie la boucle
docs:
Documentation uniquement
docs: complète le README
test:
Ajout ou modif de tests
test: couvre cas limite hp=0
chore:
Tâches de maintenance
chore: met à jour .gitignore

Le fichier .gitignore — ce qu'il ne faut pas committer

🚫 Fichiers à exclure (Python)
.gitignore
# Fichiers compilés Python __pycache__/ *.py[cod] *.pyo # Environnements virtuels venv/ .env/ env/ # Fichiers IDE .vscode/settings.json .idea/ # Système .DS_Store # macOS Thumbs.db # Windows # Secrets — JAMAIS committer ! .env secrets.py *.key
📌 Règles .gitignore
*.ext   → ignore tous les fichiers .ext
dossier/ → ignore tout le dossier
!garder.txt → exception (ne pas ignorer)
#      → commentaire
🔐
Ne committe JAMAIS de mots de passe, tokens API ou clés privées. Même supprimés plus tard, ils restent dans l'historique Git !
Générateur complet : gitignore.io

Référence complète des commandes

CommandeDescriptionUtilisation typique
git initInitialise un nouveau dépôt Git dans le dossier courantUne seule fois par projet
git clone <url>Télécharge et initialise un dépôt distantPremière fois sur un projet existant
git statusAffiche l'état complet du dépôt (modifiés, staged, untracked)Avant chaque add/commit
git add <fichier>Ajoute un fichier spécifique à la staging areaPour stager sélectivement
git add .Ajoute TOUS les fichiers modifiés/nouveauxQuand tout est prêt
git commit -m "msg"Crée un instantané avec un message descriptifAprès chaque étape logique
git pushEnvoie les commits locaux vers GitHubPour synchroniser / remettre
git pullTélécharge et intègre les commits distantsEn début de session
git diffAffiche les modifications ligne par ligne non encore stagéesPour relire avant de committer
git log --onelineHistorique compact (hash + message)Pour naviguer l'historique
git restore <fichier>Annule les modifications non commitées d'un fichierPour annuler une erreur
git restore --staged <f>Retire un fichier de la staging area (sans effacer)Si tu as stagé par erreur
git stashMet de côté les modifs en cours sans committerPour changer de branche vite
git stash popRéapplique les modifs mises de côtéAprès git stash

Erreurs courantes et comment les corriger

❌ "fatal: not a git repository"
erreur très fréquente
Message d'erreur
fatal: not a git repository (or any of the parent directories): .git
Cause
Tu exécutes une commande Git dans un dossier qui n'est pas un dépôt initialisé.
Solution
correction
# Vérifie où tu es $ pwd # Navigate vers le bon dossier, ou initialise $ cd mon-projet $ git init
❌ "rejected — non-fast-forward"
lors d'un push
Message d'erreur
! [rejected] main -> main (non-fast-forward) hint: Updates were rejected because the remote contains work that you do not have locally.
Cause
Le dépôt distant contient des commits que tu n'as pas en local (quelqu'un a pushé avant toi, ou tu as committé directement sur GitHub).
Solution
correction
# 1. Récupérer les changements distants d'abord $ git pull # 2. Résoudre les conflits éventuels # 3. Puis pusher $ git push
❌ "Please tell me who you are" (identité manquante)
premier commit
Message d'erreur
Author identity unknown Please tell me who you are. Run: git config --global user.email "you@example.com"
Solution
correction
$ git config --global user.email "toi@etudiant.be" $ git config --global user.name "Prénom Nom"
❌ Committer le mauvais message
dernier commit uniquement
Solution (si pas encore pushé)
correction
# Modifier le message du DERNIER commit $ git commit --amend -m "feat: nouveau message correct" # ⚠ Ne pas faire après un push !

Le panneau Source Control natif

🔵 Accéder à Source Control natif · aucune installation
raccourcis
# Ouvrir Source Control Ctrl + Shift + G # Windows/Linux Cmd + Shift + G # macOS # Terminal intégré Ctrl + ` # Palette de commandes (tout faire) Ctrl + Shift + P → taper "Git:" pour voir toutes les actions # Changer de branche → cliquer sur le nom de branche en bas à gauche
1

Panneau "Changes"

Liste tous les fichiers modifiés. Survole → clique + pour stager un fichier, ou +↑ en haut pour stager tout.

2

Zone de message

Tape ton message de commit dans le champ texte en haut du panneau Source Control.

3

Commit

Bouton ✓ Commit ou Ctrl+Enter dans la zone de message.

4

Sync / Push

Bouton ⟳ Sync Changes, ou icône ↑ dans la barre de statut en bas.

Indicateurs visuels dans l'éditeur

🟢 Gouttière (gutter)
█ vert → ligne ajoutée
█ bleu → ligne modifiée
▶ rouge → ligne supprimée
Ces indicateurs sont natifs dans VSCode dès qu'un dépôt Git est ouvert.
🔵 Barre de statut (bas)
⎇ main → branche active (cliquable)
↑1 → 1 commit à pusher
↓2 → 2 commits à puller
⚠ 3 → 3 erreurs dans le code
📁 Explorateur de fichiers
U → Untracked (nouveau)
M → Modified (modifié)
A → Added (stagé)
D → Deleted (supprimé)

Extensions indispensables

Installer : Ctrl+Shift+X → rechercher par nom ou identifiant. Clic sur Install.
🦊

GitLens — Git supercharged

L'extension Git la plus puissante : blame inline (qui a écrit quoi), timeline de fichier, comparaison de branches, historique détaillé. Indispensable.

eamodio.gitlens
📊

Git Graph

Affiche un graphe visuel interactif de toutes les branches et commits. Clique sur un commit pour voir ses détails et ses diffs. Très utile pour comprendre l'arbre Git.

mhutchie.git-graph
🔍

Git History

Affiche l'historique d'un fichier ou d'une ligne précise. Clique droit sur du code → "Git: View File History". Parfait pour comprendre l'évolution d'un fichier.

donjayamanne.githistory

GitHub Pull Requests & Issues

Gère tes pull requests et issues GitHub sans quitter VSCode. Voir les commentaires de ton prof, répondre, consulter le feedback — tout depuis l'éditeur.

GitHub.vscode-pull-request-github
🤝

Live Share

Partage ta session VSCode en temps réel avec d'autres personnes. Idéal pour le pair programming ou pour montrer ton code à ton prof en direct.

MS-vsliveshare.vsliveshare
🎨

Error Lens

Affiche les erreurs et avertissements directement sur la ligne concernée, en rouge dans l'éditeur. Plus besoin de survoler pour voir le message d'erreur.

usernamehw.errorlens

Workflow Git complet dans VSCode

🔄 Du clone au push, sans quitter VSCode
1

Cloner un dépôt

Ctrl+Shift+P → "Git: Clone" → colle l'URL GitHub → choisis un dossier → "Open" dans VSCode

2

Modifier des fichiers

Code normalement. Tu vois les lettres M (modified) apparaître dans l'explorateur et la pastille 🔵 dans Source Control.

3

Relire les diffs

Clique sur un fichier modifié dans Source Control → une vue côte-à-côte s'ouvre : rouge = supprimé, vert = ajouté.

4

Stager et committer

Clic + sur les fichiers → tape un message → Ctrl+Enter. C'est équivalent à git add . && git commit.

5

Synchroniser (Push)

Bouton ⟳ Sync Changes dans Source Control, ou clique sur ↑1 dans la barre de statut.

Problèmes courants dans VSCode

❌ "Git not found" — Git non détecté
Cause : Git n'est pas installé ou pas dans le PATH.
Solution : installe Git depuis git-scm.com, relance VSCode. Vérifie avec git --version dans le terminal.
❌ Bouton "Publish Branch" au lieu de "Push"
Cause : la branche locale n'a pas encore d'équivalent distant.
Solution : clique sur "Publish Branch" — c'est normal pour une nouvelle branche, ça exécute git push -u origin <branche>.
❌ "There are no staged changes to commit"
Cause : tu as cliqué Commit sans avoir stagé de fichiers.
Solution : clique d'abord sur + à côté des fichiers dans "Changes", puis committe.

Accepter un devoir — étape par étape

🔗 Du lien d'invitation à ton dépôt personnel
1

Reçois le lien d'invitation

Ton prof te partage une URL de type classroom.github.com/a/XXXXXXXX. Clique dessus.

2

Connecte-toi à GitHub

Si tu n'es pas connecté, GitHub te demandera de te connecter ou créer un compte. Utilise ton adresse étudiante pour accéder à GitHub Education.

3

Identifie-toi dans le roster

Cherche ton nom dans la liste de la classe et clique dessus. Important : ne clique pas sur le nom de quelqu'un d'autre — cela lierait le mauvais étudiant à ton compte !

4

Accepte le devoir

Clique "Accept this assignment". GitHub crée automatiquement un dépôt privé à ton nom : github.com/classe/devoir-tonnom

5

Attends la création

Patiente quelques secondes, puis clique sur le lien affiché pour accéder à ton dépôt personnel. Bookmark-le !

Chaque étudiant obtient son propre dépôt privé. Tu ne vois pas le travail des autres, et ils ne voient pas le tien — mais ton prof voit tout.

Cycle de travail complet

📥 1. Cloner son dépôt Classroom
terminal — une seule fois
# Copie l'URL depuis le bouton vert "Code" sur GitHub # (option HTTPS recommandée pour les débutants) $ git clone https://github.com/classe/devoir-tonnom.git $ cd devoir-tonnom # Vérifier le contenu du dépôt $ ls $ cat README.md # lire les consignes !
💡
Dans VSCode : Ctrl+Shift+P → "Git: Clone" → colle l'URL.
🔁 2. Travailler et committer régulièrement
à répéter souvent
# Vérifie l'état avant de commencer $ git status # ... code, code, code ... # Sauvegarde un point d'avancement $ git add . $ git commit -m "feat: implémente classe Pokemon" $ git push # Répète ce cycle à chaque étape logique
📤 3. Remettre son travail final
avant la deadline
# S'assurer que tout est committé $ git status On branch main nothing to commit, working tree clean # Pousser les derniers commits $ git push # Confirmer sur GitHub que tout est bien là # → github.com/classe/devoir-tonnom → onglet Code # → vérifier la date du dernier commit
🚨
Le push = la remise. Un commit local non pushé est invisible pour ton prof. Vérifie toujours sur GitHub !
✅ 4. Vérifier la remise et les tests
A

Onglet "Code"

Vérifie que tous tes fichiers sont présents et que la date du dernier commit est correcte.

B

Onglet "Actions" (Autograding)

Si ton prof a configuré des tests automatiques, tu verras ✅ (réussi) ou ❌ (échoué). Clique sur ❌ pour lire les logs d'erreur.

C

Onglet "Pull Requests" → Feedback

Ton prof peut laisser des commentaires de correction dans la PR "Feedback" automatiquement créée par Classroom.

Comprendre GitHub Actions (tests automatiques)

🤖 Comment lire les résultats Autograding
Tous les tests passent
Ton code répond aux critères. Workflow affiché en vert dans l'onglet Actions.
Certains tests échouent
Clique → "Autograding" → lis les logs → corrige → commit + push → les tests relancent automatiquement.
🟡
En cours d'exécution
Les tests tournent après chaque push. Patiente 30–60 secondes puis recharge la page.
exemple de log d'erreur à lire
FAILED tests/test_pokemon.py::test_attaquer AssertionError: assert 80 == 85 → ton pokemon.attaquer() retourne 80, attendu 85 PASSED tests/test_pokemon.py::test_initialisation PASSED tests/test_pokemon.py::test_soigner 2 passed, 1 failed

Problèmes courants dans GitHub Classroom

❌ "Permission to ... denied to ..."
lors d'un push
Cause
Tu n'es pas authentifié, ou tu essaies de pusher vers le mauvais dépôt.
Solution
correction
# Vérifier l'URL du distant $ git remote -v # Doit afficher TON dépôt Classroom # Installer GitHub CLI et se connecter $ gh auth login # Ou configurer un Personal Access Token (PAT) # GitHub → Settings → Developer Settings → PAT
❌ J'ai cloné avant de voir le lien dans "Mon nom" → mauvais dépôt
Solution : retourne sur classroom.github.com, accepte à nouveau le devoir, puis clone l'URL correcte. Assure-toi que l'URL contient ton nom.
❌ Les GitHub Actions ne se déclenchent pas
Cause possible : ton push n'a pas fonctionné, ou les Actions sont désactivées.
Vérification : onglet Code → vérifie si ton commit récent apparaît. Si oui, attends 1 min et recharge Actions.
❌ "Nothing to commit, working tree clean" mais je veux pusher
Cause : tes commits sont déjà pushés, ou tu n'as fait aucun commit.
Vérification : git log --oneline → compare avec ce que tu vois sur GitHub.
diagnostic
$ git log --oneline $ git status # Si "Your branch is ahead of 'origin/main' by N commits" $ git push # ← c'est ce qu'il faut faire

Checklist avant la remise

☑️ Tout vérifier avant la deadline