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)
2 · Créer un compte et le dépôt sur GitHub
- Crée un compte sur github.com (adresse académique conseillée ; pense au GitHub Student Developer Pack, gratuit).
- En haut à droite : + ▸ New repository.
- Nom du dépôt : fioul-groupe. Description : « Commande groupée de fioul — projet SLAM ».
- Visibilité : Private (on ouvrira plus tard si besoin).
- Coche Add a README file et choisis un .gitignore (modèle Java pour commencer) et une licence (ex. MIT).
- 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
- Photo de profil ▸ Settings ▸ SSH and GPG keys ▸ New SSH key.
- Colle la clé publique, donne un titre (« PC lycée »), valide.
- Teste : ssh -T git@github.com.
Option B — jeton d'accès personnel (PAT) pour HTTPS
- Settings ▸ Developer settings ▸ Personal access tokens ▸ Fine-grained tokens ▸ Generate new token.
- Portée : le dépôt fioul-groupe, permission Contents: Read and write, durée limitée.
- Le jeton s'utilise à la place du mot de passe lors du
git push(il ne s'affiche qu'une fois).
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
- Dépôt
fioul-groupecréé, README rédigé (nom du projet, membres du binôme, objectif). - Authentification SSH (ou PAT) fonctionnelle : un
git pushréussi. - Capture d'écran du dépôt sur GitHub, ajoutée au dossier.
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
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
- Onglet </> Code : le sélecteur de branche montre main et feature/modele-campagne.
- L'onglet Insights ▸ Network affiche le graphe des branches et commits.
.gitignoreadapté (Java + Flutter + secrets).- Au moins deux branches de fonctionnalité poussées, avec des commits conventionnels.
git log --onelinelisible (copie dans le dossier).
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
- Après un
pushde branche, GitHub propose un bandeau Compare & pull request. - Sinon : onglet Pull requests ▸ New pull request, base main ← compare feature/….
- Titre + description : quoi et pourquoi. Lier une issue avec Closes #3.
- À droite : Reviewers (le binôme), Labels, Assignees.
- Create pull request.
2 · Faire une revue de code
- Onglet Files changed : commenter une ligne précise en cliquant le + dans la marge.
- Review changes : choisir Comment, Approve ou Request changes.
- 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
- 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.
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
- Onglet Issues ▸ New issue.
- Titre orienté user story : « En tant que particulier, je rejoins une campagne ».
- Description : critères d'acceptation sous forme de cases - [ ] ….
- Labels : mongodb, api, flutter, bug, priorité:haute (créés via Issues ▸ Labels).
- Milestone : « Bloc données », « Bloc API », « Bloc mobile » (via Issues ▸ Milestones).
2 · Le tableau de bord (Projects)
- Onglet Projects ▸ New project ▸ Board.
- Colonnes Todo / In progress / In review / Done.
- Add item pour rattacher les issues ; glisser-déposer entre colonnes.
- 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)"
closes, fixes, resolves ferment l'issue ; l'item passe alors tout seul en Done sur le board.- ≥ 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).
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)
- Settings ▸ Rules ▸ Rulesets ▸ New branch ruleset (ou Settings ▸ Branches en mode classique).
- Cible : la branche main.
- Active : Require a pull request before merging (donc plus de push direct).
- Require approvals : 1 relecteur minimum.
- Require status checks to pass : on cochera la CI à la séance 6.
- Enregistre : tenter un
git pushdirect 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
- .github/ISSUE_TEMPLATE/bug.md et /feature.md — GitHub les propose au clic sur « New issue ».
- .github/pull_request_template.md — pré-remplit chaque PR (résumé, checklist, issue liée).
mainprotégée : PR + 1 revue obligatoires, push direct refusé.- Fichier
CODEOWNERSet modèles d'issue/PR en place. - Preuve d'un push direct refusé (capture du message d'erreur).
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
- Onglet Actions : chaque exécution, ses logs step par step.
- Sur une PR : un ✅ ou ❌ apparaît ; clic sur Details pour les logs.
- Retourne dans le ruleset (séance 5) et coche Require status checks → CI API : une PR rouge ne peut plus être fusionnée.
- Ajoute un badge de statut dans le README (menu … ▸ Create status badge depuis Actions).
mobile.yml avec subosito/flutter-action lance flutter analyze et flutter test.- 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.
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
- Place ce portail (index.html + assets) dans un dossier /site du dépôt, puis pousse.
- Settings ▸ Pages.
- Source : Deploy from a branch, branche main, dossier /site (ou /root).
- Après ~1 min : le site est en ligne sur https://<compte>.github.io/fioul-groupe/.
2 · Gérer les secrets (jamais dans le code)
- Settings ▸ Secrets and variables ▸ Actions ▸ New repository secret.
- Ex. : MONGODB_URI = l'URI Atlas (avec mot de passe).
- 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
- Releases ▸ Draft a new release, choisir le tag v1.0.0.
- Rédiger les notes de version ; joindre l'APK dans Assets.
- Portail en ligne via GitHub Pages (URL dans le README).
- Un secret configuré et utilisé par un workflow.
- Une release
v1.0.0avec notes (et APK si disponible).
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
- Settings ▸ Advanced Security : active Dependabot alerts et Secret scanning.
- Dependabot ouvre automatiquement des PR de mise à jour des dépendances vulnérables.
- Ajoute .github/dependabot.yml pour surveiller Maven et pub (Flutter).
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)
revert (non destructif). On réserve reset à ce qui est encore purement local.3 · Finaliser la documentation
- README complet : présentation, prérequis, comment lancer l'API et l'appli, URL Pages, badge CI, captures.
- Un Wiki ou un dossier /docs pour la doc détaillée.
- Vérifier licence,
.gitignore, absence de secret dans l'historique. - Board Projects entièrement en Done, milestones clôturés.
- Dépôt sécurisé (Dependabot, secret scanning actifs).
- Historique propre, un
revertdémontré. - README professionnel + site en ligne + release : le dépôt est prêt pour la soutenance.