Aller au contenu

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)

  1. Crée le dépôt : sh init-depot.sh site-bellevigne, puis cd site-bellevigne.
  2. Lis index.html, prix.js et tests.js, exécute node tests.js et git log --oneline.
  3. Réponds : que calcule prixLocation ? Que valent prixLocation(20, 2.5) et prixLocation(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)

  1. Crée deux branches à partir de main : horaires (« de 8 h 30 à 17 h 30 ») et ete (« de 9 h à 16 h (été) »), chacune modifiant la même ligne de index.html, avec un commit.
  2. Fusionne horaires dans main (sans problème), puis ete : conflit. Résous-le en gardant les horaires d'été, supprime les marqueurs, vérifie, git add, commit.
  3. Pose l'étiquette v1.1.
  4. Modifie l'adresse de contact, commit, puis annule ce commit avec git revert. Que contient git 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)

  1. 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.git puis git push -u origin main --tags.
  2. Ton binôme clone : git clone ../central.git clone-binome, modifie l'adresse de contact, commit et pousse.
  3. De ton côté, modifie la même ligne (autre adresse), commit et tente git push. Que répond Git ? ______________________
  4. Fais git pull --no-rebase origin main, résous le conflit en accord avec ton binôme, commit, pousse.
  5. Rédige trois lignes d'entrée de journal des modifications pour la version 1.2.
Éléments de réponse
  1. Le push est rejeté (« rejected … fetch first ») : le dépôt central contient un commit que tu n'as pas. 4. git pull signale un conflit sur index.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 : ______________________