Introduction
DAYLIGHT CAFE corrige le prix de son flat white. La mise à jour du prix et le menu à emporter correspondant sont déjà rédigés. Une annonce saisonnière inachevée se trouve dans le même fichier de menu, et les notes de dégustation privées doivent rester en dehors du commit public.
Vous choisirez précisément ce qui entre dans un commit Git tout en préservant le reste du travail. Vous devez savoir vous déplacer dans un terminal et connaître les bases des fichiers texte. L'arbre de travail, la zone de préparation et les instantanés des commits Git sont expliqués ici ; aucune programmation de site web ni aucun compte GitHub n'est nécessaire.
Utilisez Workspace pour les commandes, Working Copy pour voir les fichiers en cours de modification et Committed Menu pour voir les fichiers exacts stockés dans le commit courant. Les deux pages lisent du contenu réel et ne reconstituent jamais les fichiers manquants. Le café, l'illustration et le menu sont des supports de formation originaux. Les libellés de l'interface et les sorties d'exécution restent en anglais.
Lire les deux versions du menu
Dans cette étape, vous comparerez le menu public aux fichiers de travail préparés, puis vous définirez une identité d'auteur propre au dépôt.
Ouvrez Committed Menu. Le flat white coûte EUR 3.80, et le panneau saisonnier indique que les boissons sont en préparation. Utilisez Download takeaway menu pour ouvrir le véritable fichier texte téléchargeable. Il indique lui aussi EUR 3.80.
Passez à Working Copy. Le flat white coûte désormais EUR 4.20, mais le panneau saisonnier contient également une annonce de dégustation privée. Seule la correction du prix est approuvée. Les deux fichiers du menu public doivent indiquer EUR 4.20 ; le brouillon saisonnier et tasting-notes.txt doivent rester sur votre machine, en dehors du commit.
La vue Working Copy laisse visible l'annonce saisonnière inachevée :

Passez à Workspace. Cet onglet s'ouvre dans /home/labex/project/daylight-menu, le dépôt Git préparé. Utilisez pwd pour afficher votre répertoire courant :
pwd
Si vous êtes allé ailleurs, revenez avec le chemin complet :
cd /home/labex/project/daylight-menu
Un dépôt stocke les instantanés et l'historique d'un projet. L'arbre de travail est l'ensemble des fichiers que vous pouvez modifier. git status --short résume les différences entre ces fichiers, le dernier commit et la zone de préparation. --short demande un affichage compact :
git status --short
Vous devriez voir menu.txt et menu-download.txt modifiés, ainsi que ?? tasting-notes.txt. ?? signifie que les notes ne sont pas suivies : Git ne les a ajoutées à aucun instantané. Un fichier modifié n'est pas automatiquement inclus dans un commit.
Git enregistre un nom d'auteur et une adresse e-mail dans chaque commit. git config --local enregistre un paramètre uniquement dans ce dépôt. Les guillemets maintiennent les deux mots du nom ensemble. Utilisez cette identité fictive pour la formation :
git config --local user.name "Alex Morgan"
git config --local user.email "alex@example.test"
Relisez les valeurs :
git config --local user.name
git config --local user.email
Vous devez obtenir Alex Morgan et alex@example.test. Aucune identité Git globale ni aucun compte externe n'est modifié. Toutes les commandes suivantes de cet atelier doivent être exécutées dans ce même dépôt.
Préparer uniquement le bloc de correction du prix approuvé
Dans cette étape, vous placerez la correction du prix approuvée dans la zone de préparation sans inclure le brouillon saisonnier.
Restez dans Workspace. Un commit est un instantané enregistré. HEAD désigne le commit courant. La zone de préparation, également appelée index, contient l'instantané exact que le prochain commit enregistrera. La préparation copie le contenu sélectionné dans l'index ; elle ne supprime pas les autres modifications de travail.
--no-pager est une option Git qui affiche directement la sortie au lieu d'ouvrir un visualiseur interactif. Utilisez-la pour les comparaisons ci-dessous. Si une commande Git précédente a déjà ouvert un visualiseur affichant (END), appuyez sur q pour revenir au shell ; ne saisissez pas la commande suivante dans ce visualiseur.
git --no-pager diff compare l'arbre de travail à l'index. Le séparateur -- indique que l'argument suivant est un nom de fichier plutôt qu'une option Git :
git --no-pager diff -- menu.txt
Repérez deux groupes de modifications, appelés blocs ou hunks. Une ligne commençant par - représente le contenu précédent ; une ligne commençant par + représente le contenu proposé. Le premier bloc fait passer le prix du flat white de 3.80 à 4.20. Le second modifie l'annonce saisonnière. La ligne @@ indique l'emplacement de chaque bloc, et non du contenu du menu.
git add --patch demande quels blocs copier dans l'index. Cette commande modifie l'instantané préparé tout en laissant le fichier de travail complet intact :
git add --patch menu.txt
Au bloc du prix du flat white, saisissez y et appuyez sur Enter pour le préparer. Au bloc du panneau saisonnier, saisissez n et appuyez sur Enter pour le laisser non préparé. Lisez le texte affiché avant chaque réponse ; y signifie oui et n signifie non.
Inspectez maintenant les différences réellement préparées. --cached sélectionne la comparaison entre HEAD et l'index :
git --no-pager diff --cached -- menu.txt
Seule la correction du prix doit apparaître. Comparez-la à ce qui reste non préparé :
git --no-pager diff -- menu.txt
Seule l'annonce saisonnière doit apparaître ici. Aucun commit n'a encore été créé.
Si vous avez sélectionné le mauvais bloc, utilisez git restore --staged pour restaurer l'entrée de ce fichier dans l'index à partir de HEAD. --staged cible uniquement l'index : la correction du prix et le brouillon restent donc dans le fichier de travail :
git restore --staged menu.txt
Répétez ensuite git add --patch menu.txt, choisissez le bloc du prix et inspectez à nouveau les deux différences. Cette récupération est sûre avant le commit, car elle ne supprime pas vos fichiers de travail.
Inclure le menu à emporter correspondant
Dans cette étape, vous rendrez le prochain commit complet en ajoutant le fichier téléchargeable correspondant et en examinant chaque fichier préparé.
Restez dans Workspace. Le café propose à la fois une page et un menu à emporter. Publier une seule correction laisserait deux prix différents. cat affiche un petit fichier texte :
cat menu-download.txt
Il contient déjà Flat white: EUR 4.20. Ce fichier ne contient que la correction approuvée ; préparez donc le fichier entier :
git add menu-download.txt
La commande simple git add prépare le fichier nommé. Évitez de préparer tout le répertoire : il contient aussi les notes privées et l'annonce inachevée.
--name-only liste les chemins concernés par une différence sans afficher leur contenu. Examinez les chemins préparés :
git --no-pager diff --cached --name-only
La liste doit contenir uniquement menu-download.txt et menu.txt. Examinez ensuite toutes leurs différences préparées :
git --no-pager diff --cached
Les deux versions publiques doivent indiquer le même prix de 4.20. L'annonce saisonnière et les notes de dégustation ne doivent pas apparaître.
Pour lire un fichier préparé complet plutôt qu'une différence, utilisez git --no-pager show avec :menu.txt. Le deux-points initial sélectionne l'entrée dans l'index :
git --no-pager show :menu.txt
Le menu préparé associe EUR 4.20 au texte saisonnier d'origine, Seasonal drinks are being planned. Cette combinaison prouve que l'index peut différer de l'arbre de travail.
Si vous avez préparé les notes privées par erreur, retirez-les de la zone de préparation sans supprimer le fichier :
git restore --staged tasting-notes.txt
N'exécutez cette récupération que si les notes ont été préparées ; sinon, Git peut à juste titre signaler que le chemin non suivi est inconnu. Inspectez à nouveau git --no-pager diff --cached avant de continuer. Un nom de fichier mal orthographié ne change rien : utilisez git status --short pour trouver le vrai nom, puis répétez la commande voulue.
Créer le commit et lire le résultat public réel
Dans cette étape, vous enregistrerez un commit ciblé et prouverez que le travail inachevé reste disponible ensuite.
Restez dans Workspace. git commit enregistre l'index complet sous la forme d'un nouvel instantané. -m fournit son court message explicatif ; les guillemets maintiennent ce message ensemble :
git commit -m "Correct the flat white price"
Git signale un nouveau commit et deux fichiers modifiés. Son empreinte varie. Le message décrit le travail, mais c'est le contenu réel de l'instantané qui compte.
git --no-pager show peut lire un fichier directement depuis un commit. HEAD:menu.txt désigne le fichier nommé menu.txt stocké dans le commit courant :
git --no-pager show HEAD:menu.txt
git --no-pager show HEAD:menu-download.txt
Les deux affichent le prix approuvé de 4.20. L'annonce saisonnière enregistrée dans le commit indique toujours que les boissons sont en préparation.
Vérifiez le travail restant :
git status --short
Vous devez obtenir M menu.txt et ?? tasting-notes.txt. Les deux colonnes d'état distinguent les modifications préparées à gauche des modifications de travail non préparées à droite. Le M dans la seconde colonne signifie que le brouillon saisonnier reste non préparé. Les notes ne sont toujours pas suivies. Un état vide serait incorrect pour cette tâche : il signifierait que le travail inachevé à préserver a disparu ou est entré dans un commit.
Lisez la différence restante et les notes :
git --no-pager diff -- menu.txt
cat tasting-notes.txt
Passez à Committed Menu et actualisez la page. Confirmez que le flat white coûte EUR 4.20 et que le panneau saisonnier conserve son texte public d'origine. Téléchargez à nouveau le menu à emporter et confirmez le même prix dans le véritable fichier. Passez à Working Copy : le brouillon de dégustation privée y est toujours visible.
Le menu enregistré dans le commit affiche le prix approuvé et l'annonce saisonnière publique d'origine :

Vous disposez maintenant d'une correction publique complète, tandis que le travail sans rapport reste intact. Aucun push n'est nécessaire ; ce projet enseigne les limites des commits locaux. La collaboration à distance fait l'objet d'un autre projet.
Résumé
Vous avez distingué les fichiers de travail, l'index et un commit, sélectionné un bloc, inclus le fichier téléchargeable correspondant et vérifié le menu réellement enregistré dans le commit. Le brouillon saisonnier et les notes privées sont restés en dehors du commit. Un commit utile contient la modification prévue dans son intégralité, et non tous les fichiers qui se trouvent être modifiés.



