🛢️Parcours Fioul GroupéParcours 0 — Forge & Git (GitHub)
Accueil › Parcours 0 · Forge & Git
🔧 Parcours 0 — La forge, avant tout le reste

Mettre en place et piloter le projet sur GitHub

Huit séances d'énoncés, du premier commit jusqu'au déploiement automatisé. On n'apprend pas Git « à vide » : chaque séance fait avancer le vrai dépôt fioul-groupe, avec les commandes exactes et le chemin précis dans l'interface GitHub à chaque étape.

🎯 Public : BTS SIO 2e année ⏱️ 8 séances de 2 h 👥 En binôme sur un dépôt commun 🗂️ Fil rouge : fioul-groupe
Vocabulaire de la forge — une forge est une plateforme qui héberge le code et outille tout le cycle de vie du projet : dépôt Git, suivi de tâches (issues), revue de code (pull requests), automatisation (Actions), hébergement (Pages). GitHub est une forge ; GitLab et la Forge des communs de l'Éducation nationale en sont d'autres. Git est l'outil de gestion de versions ; la forge est le service qui l'entoure.
1 Séance 1

Créer le dépôt et le premier commit

Objectifs — installer et configurer Git, comprendre dépôt local / dépôt distant, créer le dépôt fioul-groupe sur GitHub, l'authentifier, et pousser un premier contenu.

1 · Installer et configurer Git

Terminal (une seule fois par poste)

git --version                       # vérifier l'installation
git config --global user.name "Prénom Nom"
git config --global user.email "prenom.nom@exemple.fr"
git config --global init.defaultBranch main   # branche par défaut = main
git config --global core.autocrlf input        # fins de ligne (Windows)
Pourquoi ces réglages — le nom et l'e-mail sont inscrits dans chaque commit : c'est ainsi que la forge attribue le travail à son auteur. Utilise le même e-mail que ton compte GitHub pour que tes commits te soient reconnus.

2 · Créer un compte et le dépôt sur GitHub

🖱️ Dans l'interface GitHub
  1. Crée un compte sur github.com (adresse académique conseillée ; pense au GitHub Student Developer Pack, gratuit).
  2. En haut à droite : + ▸ New repository.
  3. Nom du dépôt : fioul-groupe. Description : « Commande groupée de fioul — projet SLAM ».
  4. Visibilité : Private (on ouvrira plus tard si besoin).
  5. Coche Add a README file et choisis un .gitignore (modèle Java pour commencer) et une licence (ex. MIT).
  6. Create repository.

3 · S'authentifier : SSH ou token

GitHub n'accepte plus le mot de passe en ligne de commande. Deux méthodes :

Option A — clé SSH (recommandée)

ssh-keygen -t ed25519 -C "prenom.nom@exemple.fr"
cat ~/.ssh/id_ed25519.pub          # copier la clé PUBLIQUE
🖱️ Dans GitHub
  1. Photo de profil ▸ Settings ▸ SSH and GPG keys ▸ New SSH key.
  2. Colle la clé publique, donne un titre (« PC lycée »), valide.
  3. Teste : ssh -T git@github.com.

Option B — jeton d'accès personnel (PAT) pour HTTPS

🖱️ Dans GitHub
  1. Settings ▸ Developer settings ▸ Personal access tokens ▸ Fine-grained tokens ▸ Generate new token.
  2. Portée : le dépôt fioul-groupe, permission Contents: Read and write, durée limitée.
  3. Le jeton s'utilise à la place du mot de passe lors du git push (il ne s'affiche qu'une fois).
Sécurité — un PAT ou une clé privée est un secret : jamais dans le dépôt, jamais partagé, durée d'expiration courte.

4 · Relier le local au distant

Le dépôt existe déjà sur GitHub (créé à l'étape 2). On le clone pour en avoir une copie locale :

git clone git@github.com:<compte>/fioul-groupe.git
cd fioul-groupe
git remote -v                  # origin → l'URL du dépôt distant

On ajoute un premier fichier, puis le cycle fondamental modifier → indexer → valider → pousser :

echo "# Fioul Groupé" >> README.md
git status                     # voir ce qui a changé
git add README.md              # indexer (staging)
git commit -m "docs: présentation du projet"
git push                       # envoyer vers origin
📦 Livrable de la séance
  • Dépôt fioul-groupe créé, README rédigé (nom du projet, membres du binôme, objectif).
  • Authentification SSH (ou PAT) fonctionnelle : un git push réussi.
  • Capture d'écran du dépôt sur GitHub, ajoutée au dossier.
2 Séance 2

Commits propres & branches

Objectifs — écrire un historique lisible (commits atomiques, messages conventionnels), maîtriser .gitignore, et travailler sur des branches sans polluer main.

1 · Ignorer ce qui ne doit pas être versionné

On ne versionne jamais les fichiers générés, les dépendances ni les secrets. Le .gitignore les exclut :

# .gitignore (extraits)
target/            # build Maven
build/             # build Flutter/Gradle
.env               # variables secrètes
*.log
.idea/  .vscode/   # réglages d'IDE
Déjà suivi par erreur ? git rm -r --cached target/ retire un dossier du suivi sans l'effacer du disque, puis on commit.

2 · Des commits atomiques et bien nommés

Un commit = une intention. On adopte la convention Conventional Commits (utile pour la CI et les releases plus tard) :

git add src/model/Campagne.java
git commit -m "feat: ajoute le modèle Campagne"
# types courants : feat, fix, docs, refactor, test, chore
git log --oneline --graph       # visualiser l'historique

3 · Travailler sur une branche

main reste stable ; chaque fonctionnalité vit sur sa propre branche :

git switch -c feature/modele-campagne   # créer + basculer
# ... on code, on commit sur la branche ...
git push -u origin feature/modele-campagne  # publier la branche
git branch                              # lister les branches
git switch main                         # revenir sur main
🖱️ Dans GitHub
  1. Onglet </> Code : le sélecteur de branche montre main et feature/modele-campagne.
  2. L'onglet Insights ▸ Network affiche le graphe des branches et commits.
📦 Livrable de la séance
  • .gitignore adapté (Java + Flutter + secrets).
  • Au moins deux branches de fonctionnalité poussées, avec des commits conventionnels.
  • git log --oneline lisible (copie dans le dossier).
3 Séance 3

Collaborer : Pull Requests, revue & conflits

Objectifs — intégrer le travail via des Pull Requests, faire une revue de code entre binômes, et résoudre un conflit de fusion.

1 · Ouvrir une Pull Request

🖱️ Dans GitHub
  1. Après un push de branche, GitHub propose un bandeau Compare & pull request.
  2. Sinon : onglet Pull requests ▸ New pull request, base main ← compare feature/….
  3. Titre + description : quoi et pourquoi. Lier une issue avec Closes #3.
  4. À droite : Reviewers (le binôme), Labels, Assignees.
  5. Create pull request.

2 · Faire une revue de code

🖱️ Dans GitHub
  1. Onglet Files changed : commenter une ligne précise en cliquant le + dans la marge.
  2. Review changes : choisir Comment, Approve ou Request changes.
  3. Une fois approuvée : Merge pull request → Squash and merge (historique propre), puis Delete branch.

3 · Récupérer et gérer un conflit

Après une fusion, chacun met à jour sa copie locale :

git switch main
git pull                     # récupérer main à jour
git switch feature/api
git merge main               # réintégrer main → conflit possible

Git marque les conflits dans le fichier :

<<<<<<< HEAD
prixLitre = 1.05;
=======
prixLitre = 0.98;
>>>>>>> main

On choisit la bonne version, on retire les marqueurs, puis :

git add <fichier>
git commit                   # valide la résolution
Exercice imposé — provoquez volontairement un conflit à deux (même ligne modifiée), puis résolvez-le ensemble. C'est la compétence collaborative clé.
📦 Livrable de la séance
  • Au moins deux PR fusionnées, chacune relue et commentée par le binôme.
  • Une PR liée à une issue (Closes #n).
  • Un conflit résolu, documenté en une phrase dans la PR.
4 Séance 4

Piloter le projet : Issues, labels & Projects

Objectifs — transformer le cahier des charges du fioul en tâches suivies, et piloter l'avancement sur un tableau kanban relié au code.

1 · Écrire des issues à partir des user stories

🖱️ Dans GitHub
  1. Onglet Issues ▸ New issue.
  2. Titre orienté user story : « En tant que particulier, je rejoins une campagne ».
  3. Description : critères d'acceptation sous forme de cases - [ ] ….
  4. Labels : mongodb, api, flutter, bug, priorité:haute (créés via Issues ▸ Labels).
  5. Milestone : « Bloc données », « Bloc API », « Bloc mobile » (via Issues ▸ Milestones).

2 · Le tableau de bord (Projects)

🖱️ Dans GitHub
  1. Onglet Projects ▸ New project ▸ Board.
  2. Colonnes Todo / In progress / In review / Done.
  3. Add item pour rattacher les issues ; glisser-déposer entre colonnes.
  4. Ajoute des champs : Priority, Estimate, Assignee.

3 · Relier le code aux tâches

Dans un message de commit ou une PR, un mot-clé ferme l'issue automatiquement à la fusion :

git commit -m "feat: endpoint POST /commandes (closes #12)"
Mots-clés — closes, fixes, resolves ferment l'issue ; l'item passe alors tout seul en Done sur le board.
📦 Livrable de la séance
  • ≥ 10 issues rédigées, étiquetées et rattachées à des milestones.
  • Un board Projects alimenté, reflétant l'état réel.
  • Une issue fermée automatiquement par une PR (preuve en capture).
5 Séance 5

Protéger et cadrer la collaboration

Objectifs — empêcher les erreurs sur main, imposer la revue, et standardiser issues et PR avec des modèles.

1 · Protéger la branche main (ruleset)

🖱️ Dans GitHub
  1. Settings ▸ Rules ▸ Rulesets ▸ New branch ruleset (ou Settings ▸ Branches en mode classique).
  2. Cible : la branche main.
  3. Active : Require a pull request before merging (donc plus de push direct).
  4. Require approvals : 1 relecteur minimum.
  5. Require status checks to pass : on cochera la CI à la séance 6.
  6. Enregistre : tenter un git push direct sur main est désormais refusé.

2 · Désigner des responsables (CODEOWNERS)

Un fichier .github/CODEOWNERS demande automatiquement la revue des bonnes personnes :

# chemin           responsable
/api/            @binome-backend
/mobile/         @binome-mobile

3 · Modèles d'issue et de PR

🖱️ Fichiers à ajouter au dépôt
  1. .github/ISSUE_TEMPLATE/bug.md et /feature.md — GitHub les propose au clic sur « New issue ».
  2. .github/pull_request_template.md — pré-remplit chaque PR (résumé, checklist, issue liée).
📦 Livrable de la séance
  • main protégée : PR + 1 revue obligatoires, push direct refusé.
  • Fichier CODEOWNERS et modèles d'issue/PR en place.
  • Preuve d'un push direct refusé (capture du message d'erreur).
6 Séance 6

Intégration continue avec GitHub Actions

Objectifs — automatiser build et tests à chaque push/PR, pour ne fusionner que du code qui compile et passe les tests.

1 · Comprendre un workflow

Un workflow est un fichier YAML dans .github/workflows/. Il définit des déclencheurs (on), des jobs et des steps. GitHub fournit les machines (runners).

2 · Workflow build + tests de l'API

.github/workflows/api.yml

name: CI API
on:
  push: { branches: [ main ] }
  pull_request:
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-java@v4
        with: { java-version: '21', distribution: temurin, cache: maven }
      - run: mvn -B verify        # compile + tests

3 · Voir la CI agir

🖱️ Dans GitHub
  1. Onglet Actions : chaque exécution, ses logs step par step.
  2. Sur une PR : un ✅ ou ❌ apparaît ; clic sur Details pour les logs.
  3. Retourne dans le ruleset (séance 5) et coche Require status checks → CI API : une PR rouge ne peut plus être fusionnée.
  4. Ajoute un badge de statut dans le README (menu … ▸ Create status badge depuis Actions).
Bonus Flutter — un second workflow mobile.yml avec subosito/flutter-action lance flutter analyze et flutter test.
📦 Livrable de la séance
  • Workflow CI qui compile et teste, vert sur main.
  • Statut de CI obligatoire pour fusionner (relié au ruleset).
  • Badge de build affiché dans le README.
7 Séance 7

Déployer : GitHub Pages, secrets & releases

Objectifs — publier le site du cours en ligne, gérer les secrets proprement, et versionner des livrables avec les releases.

1 · Publier le portail sur GitHub Pages

🖱️ Dans GitHub
  1. Place ce portail (index.html + assets) dans un dossier /site du dépôt, puis pousse.
  2. Settings ▸ Pages.
  3. Source : Deploy from a branch, branche main, dossier /site (ou /root).
  4. Après ~1 min : le site est en ligne sur https://<compte>.github.io/fioul-groupe/.
Le déclic — c'est la première mise en production du parcours. Les étudiants voient leur travail public dès la séance 1 du contenu technique.

2 · Gérer les secrets (jamais dans le code)

🖱️ Dans GitHub
  1. Settings ▸ Secrets and variables ▸ Actions ▸ New repository secret.
  2. Ex. : MONGODB_URI = l'URI Atlas (avec mot de passe).
  3. Dans un workflow, on y accède par ${{ secrets.MONGODB_URI }} — la valeur n'apparaît jamais dans les logs.

3 · Publier une release

Un tag marque une version ; la release l'accompagne d'une note et de fichiers (ex. l'APK Flutter) :

git tag -a v1.0.0 -m "Première version démo"
git push origin v1.0.0
🖱️ Dans GitHub
  1. Releases ▸ Draft a new release, choisir le tag v1.0.0.
  2. Rédiger les notes de version ; joindre l'APK dans Assets.
📦 Livrable de la séance
  • Portail en ligne via GitHub Pages (URL dans le README).
  • Un secret configuré et utilisé par un workflow.
  • Une release v1.0.0 avec notes (et APK si disponible).
8 Séance 8

Sécuriser, réparer & finaliser

Objectifs — durcir le dépôt, savoir revenir en arrière proprement, et livrer un projet documenté prêt pour la soutenance.

1 · Sécurité du dépôt

🖱️ Dans GitHub
  1. Settings ▸ Advanced Security : active Dependabot alerts et Secret scanning.
  2. Dependabot ouvre automatiquement des PR de mise à jour des dépendances vulnérables.
  3. Ajoute .github/dependabot.yml pour surveiller Maven et pub (Flutter).
Un secret a fuité ? le retirer d'un commit ne suffit pas : il reste dans l'historique. Il faut révoquer le secret et le régénérer. À relier à ton cours de cybersécurité.

2 · Revenir en arrière sans casser l'historique

git revert <hash>      # annule un commit en créant un commit inverse (sûr, partagé)
git restore <fichier>  # annule des modifs non validées
git reset --soft HEAD~1 # défait le dernier commit local (avant push)
Règle d'or — sur du code déjà poussé et partagé, on utilise revert (non destructif). On réserve reset à ce qui est encore purement local.

3 · Finaliser la documentation

📦 Livrable final du parcours Forge
  • Dépôt sécurisé (Dependabot, secret scanning actifs).
  • Historique propre, un revert démontré.
  • README professionnel + site en ligne + release : le dépôt est prêt pour la soutenance.
← Retour au portail