TP – Trois demandes sur un site existant
BTS SIO SISR 2e année – Bloc 1 – S10 – binôme
Note
But. Tu reçois un petit site (page d'accueil et calcul de tarif de location) déjà versionné. Tu traites trois demandes avec des branches, tu résous un conflit, tu étiquettes une version, tu annules un changement et tu collabores avec un dépôt central.
Durée : 2 h 50 (parties A à D), plus le bilan. Prérequis : cours S10 lu. Fichier : init-depot.sh. Outils : Git, Node.js.
Note
Comment ce TP fonctionne. Avant chaque manipulation, tu écris ce que tu anticipes (« J'anticipe »). Puis tu confrontes avec les éléments de réponse.
Binôme : ____________ / ____________
Contraintes
- Travaille dans un dossier de test créé par le script ; jamais sur un vrai dépôt de l'entreprise.
- Un commit par changement logique, avec un message utile.
- Les tests (
node tests.js) doivent passer avant chaque fusion.
Partie A – Lire l'existant (≈ 25 min)
- Crée le dépôt :
sh init-depot.sh site-bellevigne, puiscd site-bellevigne. - Lis
index.html,prix.jsettests.js, exécutenode tests.jsetgit log --oneline. - Réponds : que calcule
prixLocation? Que valentprixLocation(20, 2.5)etprixLocation(20, -1)? Le second résultat est-il acceptable ? ______________________
J'anticipe. Qu'attends-tu comme résultat pour prixLocation(20, -1) ? ______________________
Éléments de réponse
La fonction multiplie un tarif horaire par un nombre d'heures. prixLocation(20, 2.5) = 50. prixLocation(20, -1) = −20 : un prix négatif n'a aucun sens, c'est un défaut (ticket 1).
Partie B – Deux demandes, deux branches (≈ 55 min)
Ticket 1 (défaut). « Une durée négative donne un prix négatif. » Crée la branche correctif-duree-negative (git switch -c …). Fais lever une erreur (RangeError) pour une durée négative, ajoute le test correspondant, vérifie, commit, puis fusionne dans main avec git merge --no-ff correctif-duree-negative.
Ticket 2 (évolution). « Les associations bénéficient d'une réduction de 25 %. » Branche reduction-association : ajoute un troisième paramètre optionnel reduction (nombre entre 0 et 1, 0 par défaut), refuse une valeur hors intervalle, ajoute les tests (prixLocation(20, 3, 0.25) doit valoir 45), commit, fusionne.
Termine par git log --oneline --graph.
Je comprends. Pourquoi écrire le test avant de corriger ou en même temps ? ______________________
Éléments de réponse
Le test prouve que le défaut existe (il échoue), puis que la correction le résout (il passe) ; et il reste ensuite pour détecter une régression. Calcul : 20 × 3 × (1 − 0,25) = 45.
Partie C – Un conflit, une version, un retour arrière (≈ 55 min)
- Crée deux branches à partir de
main:horaires(« de 8 h 30 à 17 h 30 ») etete(« de 9 h à 16 h (été) »), chacune modifiant la même ligne deindex.html, avec un commit. - Fusionne
horairesdansmain(sans problème), puisete: conflit. Résous-le en gardant les horaires d'été, supprime les marqueurs, vérifie,git add, commit. - Pose l'étiquette
v1.1. - Modifie l'adresse de contact, commit, puis annule ce commit avec
git revert. Que contientgit log --oneline? ______________________
J'anticipe. Pourquoi la seconde fusion échoue-t-elle alors que la première réussit ? ______________________
Éléments de réponse
La première fusion modifie une ligne que main n'a pas touchée depuis la séparation. À la seconde, les deux branches ont changé la même ligne depuis leur point commun : Git ne peut pas choisir. Après git revert, le journal affiche un nouveau commit « Revert "…" » au-dessus du commit annulé : l'historique n'est pas réécrit.
Partie D – Travailler à deux (≈ 35 min)
- Crée un dépôt central nu :
git init --bare -b main ../central.git; dans ton dépôt,git remote add origin ../central.gitpuisgit push -u origin main --tags. - Ton binôme clone :
git clone ../central.git clone-binome, modifie l'adresse de contact, commit et pousse. - De ton côté, modifie la même ligne (autre adresse), commit et tente
git push. Que répond Git ? ______________________ - Fais
git pull --no-rebase origin main, résous le conflit en accord avec ton binôme, commit, pousse. - Rédige trois lignes d'entrée de journal des modifications pour la version 1.2.
Éléments de réponse
- Le
pushest rejeté (« rejected … fetch first ») : le dépôt central contient un commit que tu n'as pas. 4.git pullsignale un conflit surindex.html: choisir ensemble l'adresse retenue. 5. Exemple : « 1.2 – Correction : durée négative refusée. Évolution : réduction pour les associations. Mise à jour : horaires d'été et adresse de contact. »
Retour en entreprise (si ta situation le permet)
Demande à ton tuteur comment sont suivies les modifications d'un site ou d'un script de l'entreprise (dépôt, journal, simple copie de fichier) et comment un retour arrière serait fait. Compare avec le TP. Anonymise tout document.
Rendu
Compte rendu PDF, nommé RENDU-B1A2-S10-NOM.pdf : sortie de git log --oneline --graph --all, résolution du conflit (avant et après), réponses aux questions, entrée de journal des modifications. Aucun identifiant ni adresse réels.
Bilan de la séance
Remplis ce bilan seul, honnêtement : il sert à décider ce qu'il faut reprendre. Niveau : Non maîtrisé, Maîtrise partielle, Bonne maîtrise ou Excellente maîtrise (le vocabulaire des grilles nationales d'évaluation), ou Non évalué.
| Compétence du référentiel | Ce que j'ai fait dans cette séance | Niveau |
|---|---|---|
| B1.3 – Développer la présence en ligne de l'organisation | ||
| B1.4 – Travailler en mode projet |
Note
Les codes sont ceux du référentiel.
Je sais faire, sans aide :
- Lire un code existant et ses tests
- Travailler par branches, une par demande
- Résoudre un conflit de fusion
- Utiliser étiquettes et
git revert - Collaborer avec un dépôt central (pull, push)
Ce que je dois reprendre : ______________________
Ma question à poser à l'enseignant : ______________________