diff --git a/CLAUDE.md b/CLAUDE.md index e718108..0b604b4 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -20,7 +20,7 @@ La formation s'adresse à deux types de public avec des environnements différen **Public A - VM distante SSH** : une VM Linux est mise à disposition du stagiaire. Un client SSH est configuré avec accès par paire de clés. L'installation est immédiate, la connexion se fait depuis le premier jour. -**Public B - VirtualBox sur poste Windows (CID)** : les postes sont figés sur C: (les applications installées sont supprimées à chaque redémarrage : "le freeze") ; seul D:\ est conservé. Le stagiaire travaille dans D:\PrenomNOM\, avec deux sous-dossiers : `sources\` (installeur VirtualBox, Extension Pack, image DVD de Debian 13, script `installer_virtualbox.bat` ; Visual C++ Redistributable inutile au CID car déjà présent dans l'image des postes, le script le détecte) et `VirtualBox\` (la VM). VirtualBox est réinstallé à chaque séance par le script `ressources/scripts/installer_virtualbox.bat` (double-clic), qui réenregistre la VM puis lance VirtualBox (mode Basic, liste des machines). La VM FormationLinux (4 cœurs, 8 Go de RAM, disque de 30 Gio) exécute Debian 13 avec le bureau GNOME, en réseau par pont (accessible en SSH depuis Windows). +**Public B - VirtualBox sur poste Windows (CID)** : les postes sont figés sur C: (les applications installées sont supprimées à chaque redémarrage : "le freeze") ; seul D:\ est conservé. Le stagiaire travaille dans D:\PrenomNOM\, avec deux sous-dossiers : `sources\` (installeur VirtualBox, Extension Pack, image DVD de Debian 13, script `installer_virtualbox.bat` ; Visual C++ Redistributable inutile au CID car déjà présent dans l'image des postes, le script le détecte) et `VirtualBox\` (la VM). Avec le module additionnel Git sous Windows s'y ajoutent `PortableGit\` (Git portable) et `formation_linux\` (clone du dépôt), et le lanceur `sources\lancer_installation.bat` remplace le double-clic sur le script : il met le clone à jour puis lance la version du script du dépôt en lui passant `sources\` en paramètre. VirtualBox est réinstallé à chaque séance par le script `ressources/scripts/installer_virtualbox.bat` (double-clic), qui réenregistre la VM puis lance VirtualBox (mode Basic, liste des machines). La VM FormationLinux (4 cœurs, 8 Go de RAM, disque de 30 Gio) exécute Debian 13 avec le bureau GNOME, en réseau par pont (accessible en SSH depuis Windows). ##Plan de formation @@ -90,6 +90,15 @@ Les modules additionnels sont des modules complémentaires qui peuvent être sui *Prérequis : Modules 1-4 (navigation et manipulation de fichiers)* *Durée : 6-8 heures* +**Module additionnel Git sous Windows** (public B, postes du CID) +- Chapitre Git sous Windows 1 : Les concepts de Git +- Chapitre Git sous Windows 2 : Installer Git sur le lecteur D (version portable, Git Bash, Git GUI, gitk) +- Chapitre Git sous Windows 3 : Cloner le dépôt de la formation dans D:\PrenomNOM\formation_linux +- Chapitre Git sous Windows 4 : Un lanceur toujours à jour dans sources + +*Prérequis : annexe d'installation VirtualBox ; module autonome (les concepts de Git y sont réexpliqués, exception assumée au principe de non-répétition)* +*Durée : 2 heures* + **Module additionnel Docker : Conteneurisation** - Chapitre Docker 1 : Introduction et concepts de base - Chapitre Docker 2 : Images et conteneurs personnalisés @@ -145,6 +154,11 @@ formation_linux/ 02_commandes_base.md 03_branches_fusion.md 04_travail_collaboratif.md + module_git_windows/ (Git portable au CID, clone, lanceur) + 01_concepts_git.md + 02_installer_git_portable.md + 03_cloner_depot.md + 04_lanceur_sources.md module_docker/ 01_introduction_docker.md 02_images_conteneurs.md @@ -174,6 +188,7 @@ formation_linux/ installation/ (captures VirtualBox et installeur Debian des annexes) scripts/ installer_virtualbox.bat (réinstallation de VirtualBox au CID, fins de ligne CRLF) + lancer_installation.bat (lanceur pour sources\ : git pull puis script du dépôt, CRLF) outils/ captures/ (scripts de production des captures, hors CI) pdf/ (chaîne de génération PDF) @@ -189,7 +204,7 @@ formation_linux/ plans/ (plans d'implémentation) ``` -**Remarque** : `archives/cours_2025/` contient l'ancien matériau du cours de base issu de la version précédente. Ne plus le modifier et ne plus le générer en PDF. Tout nouveau contenu de cours va dans `cours_2026/`. `supports/` et `travaux_pratiques/` ne contiennent plus que les modules additionnels Git et Docker, toujours actifs. +**Remarque** : `archives/cours_2025/` contient l'ancien matériau du cours de base issu de la version précédente. Ne plus le modifier et ne plus le générer en PDF. Tout nouveau contenu de cours va dans `cours_2026/`. `supports/` et `travaux_pratiques/` ne contiennent plus que les modules additionnels (Git, Git sous Windows, Docker), toujours actifs. ## Template de chapitre diff --git a/README.md b/README.md index 6d4634e..153253e 100644 --- a/README.md +++ b/README.md @@ -94,6 +94,12 @@ Introduction à Git : concepts de base, workflow local, branches et fusion, trav Contenu : `supports/modules_additionnels/module_git/` TP : `travaux_pratiques/tp_additionnels/tp_git/` +### Module Git sous Windows (2h) + +Pour les stagiaires du CID : concepts de Git, installation de Git portable sur `D:` (Git Bash, Git GUI, gitk), clonage du dépôt de la formation, lanceur qui tient à jour le script d'installation de VirtualBox. + +Contenu : `supports/modules_additionnels/module_git_windows/` + ### Module Docker -- Conteneurisation (12-15h) Introduction à Docker : images et conteneurs, volumes et réseaux, Docker Compose. @@ -123,6 +129,7 @@ formation_linux/ +-- supports/ | +-- modules_additionnels/ # Modules additionnels (contenu) | +-- module_git/ +| +-- module_git_windows/ | +-- module_docker/ | +-- travaux_pratiques/ diff --git a/cours_2026/annexes/installation_virtualbox.md b/cours_2026/annexes/installation_virtualbox.md index 331c29b..d97aa7d 100644 --- a/cours_2026/annexes/installation_virtualbox.md +++ b/cours_2026/annexes/installation_virtualbox.md @@ -607,6 +607,11 @@ Si le résumé signale une erreur, lire le message affiché au-dessus : il indique la cause et la marche à suivre. En cas de doute, appliquer la procédure manuelle ci-dessous. +Le script de `sources\` est une copie : il ne profite pas des +améliorations publiées ensuite. Le module additionnel « Git sous +Windows » installe un lanceur qui met à jour une copie du dépôt de la +formation, puis lance la dernière version du script. + ### Procédure manuelle de secours Si le script ne fonctionne pas, faire ses étapes à la main, dans cet @@ -811,6 +816,12 @@ rem VC_redist.x64.exe (facultatif, voir ci-dessous) rem 2. Double-cliquer sur le fichier. Si Windows demande une rem autorisation, repondre Oui. rem +rem Parametre facultatif : le dossier des installeurs. Sans parametre, +rem c'est le dossier du script. Le lanceur lancer_installation.bat +rem (module Git sous Windows) s'en sert pour executer la version du +rem script tenue a jour dans le depot clone, avec les installeurs de +rem sources\. +rem rem Le script : rem - installe Visual C++ 2015-2022 x64 s'il manque sur le poste (au rem CID, il fait deja partie de l'image : VC_redist.x64.exe n'est @@ -850,10 +861,13 @@ set "NOM_VM=FormationLinux" set "VBOXMANAGE=%ProgramFiles%\Oracle\VirtualBox\VBoxManage.exe" set "VIRTUALBOX_EXE=%ProgramFiles%\Oracle\VirtualBox\VirtualBox.exe" -rem Dossier du script (D:\PrenomNOM\sources\, avec la barre finale) -rem et dossier parent (D:\PrenomNOM). +rem Dossier des installeurs (D:\PrenomNOM\sources\, avec la barre +rem finale) et dossier parent (D:\PrenomNOM). Par defaut le dossier du +rem script ; sinon le dossier passe en parametre (barre finale ajoutee). set "SOURCES=%~dp0" -for %%I in ("%~dp0..") do set "BASE=%%~fI" +if not "%~1"=="" set "SOURCES=%~f1" +if not "%SOURCES:~-1%"=="\" set "SOURCES=%SOURCES%\" +for %%I in ("%SOURCES%..") do set "BASE=%%~fI" set "DOSSIER_VMS=%BASE%\VirtualBox" set "FICHIER_VM=%DOSSIER_VMS%\%NOM_VM%\%NOM_VM%.vbox" set "JOURNAL=%SOURCES%installation_virtualbox.log" diff --git a/pdf/documents.yaml b/pdf/documents.yaml index 98b7e3c..ac77ed2 100644 --- a/pdf/documents.yaml +++ b/pdf/documents.yaml @@ -63,6 +63,14 @@ documents: - travaux_pratiques/tp_additionnels/tp_git/tp02_branches_fusion.md - travaux_pratiques/tp_additionnels/tp_git/tp03_collaboration.md - travaux_pratiques/tp_additionnels/tp_git/exercices_supplementaires.md + - fichier: module_additionnel_git_windows.pdf + titre: "Git sous Windows" + sous_titre: Module additionnel + sources: + - supports/modules_additionnels/module_git_windows/01_concepts_git.md + - supports/modules_additionnels/module_git_windows/02_installer_git_portable.md + - supports/modules_additionnels/module_git_windows/03_cloner_depot.md + - supports/modules_additionnels/module_git_windows/04_lanceur_sources.md - fichier: module_additionnel_docker.pdf titre: "Docker : conteneurisation" sous_titre: Module additionnel diff --git a/pdf/tests/test_documents.py b/pdf/tests/test_documents.py index 46dc9f5..e1dadc3 100644 --- a/pdf/tests/test_documents.py +++ b/pdf/tests/test_documents.py @@ -81,6 +81,7 @@ def test_selectionne_les_documents_demandes(): "module_07_reseaux.pdf", "module_08_automatisation.pdf", "module_additionnel_git.pdf", + "module_additionnel_git_windows.pdf", "module_additionnel_docker.pdf", "annexe_installation_ssh.pdf", "annexe_installation_virtualbox.pdf", @@ -91,7 +92,7 @@ def catalogue_du_depot(): return generer.charger_documents(generer.DOSSIER_PDF / "documents.yaml", generer.RACINE) -def test_le_catalogue_du_depot_declare_les_12_pdf(): +def test_le_catalogue_du_depot_declare_les_13_pdf(): assert [document.fichier for document in catalogue_du_depot().documents] == ATTENDUS diff --git a/ressources/scripts/installer_virtualbox.bat b/ressources/scripts/installer_virtualbox.bat index 44e59e8..b4c6b33 100644 --- a/ressources/scripts/installer_virtualbox.bat +++ b/ressources/scripts/installer_virtualbox.bat @@ -13,6 +13,12 @@ rem VC_redist.x64.exe (facultatif, voir ci-dessous) rem 2. Double-cliquer sur le fichier. Si Windows demande une rem autorisation, repondre Oui. rem +rem Parametre facultatif : le dossier des installeurs. Sans parametre, +rem c'est le dossier du script. Le lanceur lancer_installation.bat +rem (module Git sous Windows) s'en sert pour executer la version du +rem script tenue a jour dans le depot clone, avec les installeurs de +rem sources\. +rem rem Le script : rem - installe Visual C++ 2015-2022 x64 s'il manque sur le poste (au rem CID, il fait deja partie de l'image : VC_redist.x64.exe n'est @@ -52,10 +58,13 @@ set "NOM_VM=FormationLinux" set "VBOXMANAGE=%ProgramFiles%\Oracle\VirtualBox\VBoxManage.exe" set "VIRTUALBOX_EXE=%ProgramFiles%\Oracle\VirtualBox\VirtualBox.exe" -rem Dossier du script (D:\PrenomNOM\sources\, avec la barre finale) -rem et dossier parent (D:\PrenomNOM). +rem Dossier des installeurs (D:\PrenomNOM\sources\, avec la barre +rem finale) et dossier parent (D:\PrenomNOM). Par defaut le dossier du +rem script ; sinon le dossier passe en parametre (barre finale ajoutee). set "SOURCES=%~dp0" -for %%I in ("%~dp0..") do set "BASE=%%~fI" +if not "%~1"=="" set "SOURCES=%~f1" +if not "%SOURCES:~-1%"=="\" set "SOURCES=%SOURCES%\" +for %%I in ("%SOURCES%..") do set "BASE=%%~fI" set "DOSSIER_VMS=%BASE%\VirtualBox" set "FICHIER_VM=%DOSSIER_VMS%\%NOM_VM%\%NOM_VM%.vbox" set "JOURNAL=%SOURCES%installation_virtualbox.log" diff --git a/ressources/scripts/lancer_installation.bat b/ressources/scripts/lancer_installation.bat new file mode 100644 index 0000000..c6437a0 --- /dev/null +++ b/ressources/scripts/lancer_installation.bat @@ -0,0 +1,86 @@ +@echo off +rem ====================================================================== +rem lancer_installation.bat -- Formation Linux (CID) +rem +rem Lanceur a placer dans D:\PrenomNOM\sources\, a cote des installeurs. +rem Il met a jour le depot de la formation clone dans +rem D:\PrenomNOM\formation_linux (git pull), puis lance la version a jour +rem du script installer_virtualbox.bat du depot, en lui indiquant le +rem dossier sources\ ou se trouvent les installeurs. +rem +rem Prerequis (module additionnel "Git sous Windows") : +rem - Git portable dans D:\PrenomNOM\PortableGit ; +rem - le depot clone dans D:\PrenomNOM\formation_linux. +rem +rem Sans reseau ou sans Git, la mise a jour est sautee et la version du +rem script deja presente dans le depot est utilisee. +rem +rem Messages sans accents, chemins entre guillemets, aucune variable lue +rem dans le bloc qui la modifie : memes precautions que dans +rem installer_virtualbox.bat. +rem ====================================================================== + +setlocal EnableExtensions +title Mise a jour et installation - Formation Linux + +rem Dossier du lanceur (D:\PrenomNOM\sources\) et dossier parent. +set "SOURCES=%~dp0" +for %%I in ("%~dp0..") do set "BASE=%%~fI" +set "GIT=%BASE%\PortableGit\cmd\git.exe" +set "DEPOT=%BASE%\formation_linux" +set "SCRIPT=%DEPOT%\ressources\scripts\installer_virtualbox.bat" + +echo ====================================================================== +echo Mise a jour du depot de la formation +echo ====================================================================== +echo. +echo Depot : %DEPOT% +if not exist "%DEPOT%\.git\" goto sans_depot +if not exist "%GIT%" goto sans_git + +rem --ff-only : la mise a jour ne fait qu'avancer la copie locale. Si des +rem fichiers du depot ont ete modifies a la main, elle refuse sans rien +rem casser, et la version presente est utilisee. +"%GIT%" -C "%DEPOT%" pull --ff-only +if errorlevel 1 goto echec_mise_a_jour +echo OK : depot a jour. +goto lancer + +:sans_git +echo [ATTENTION] Git introuvable : %GIT% +echo Mise a jour sautee, la version presente du script est utilisee. +goto lancer + +:echec_mise_a_jour +echo [ATTENTION] Mise a jour impossible (pas de reseau, ou fichiers du +echo depot modifies a la main). La version presente du script est utilisee. +goto lancer + +:lancer +echo. +if not exist "%SCRIPT%" goto sans_script +rem Le dossier sources\ est passe sans sa barre finale. +call "%SCRIPT%" "%SOURCES:~0,-1%" +endlocal +exit /b + +rem ====================================================================== +rem Erreurs bloquantes +rem ====================================================================== + +:sans_depot +echo [ERREUR] Depot introuvable : %DEPOT% +echo Le cloner d'abord (module Git sous Windows), ou lancer directement +echo installer_virtualbox.bat s'il est present dans ce dossier. +goto fin_erreur + +:sans_script +echo [ERREUR] Script introuvable dans le depot : +echo %SCRIPT% +goto fin_erreur + +:fin_erreur +echo. +pause +endlocal +exit /b 1 diff --git a/supports/modules_additionnels/module_git_windows/01_concepts_git.md b/supports/modules_additionnels/module_git_windows/01_concepts_git.md new file mode 100644 index 0000000..d632511 --- /dev/null +++ b/supports/modules_additionnels/module_git_windows/01_concepts_git.md @@ -0,0 +1,262 @@ +# Git sous Windows 1 — Les concepts de Git + +> **Objectifs** : à la fin de ce chapitre, vous saurez : +> - expliquer à quoi sert un logiciel de gestion de versions comme Git ; +> - définir un dépôt, un commit, un historique, une branche et un dépôt distant ; +> - distinguer cloner, mettre à jour et publier, et situer GitHub par rapport à Git. +> +> **Durée en séance** : ~30 min. + +--- + +Ce module s'adresse aux stagiaires qui travaillent sur un poste Windows +de la salle du CID. Il installe Git sur le lecteur `D:`, récupère une +copie du dépôt de la formation et s'en sert pour garder à jour le script +d'installation de VirtualBox. + +Avant de manipuler Git, ce premier chapitre pose le vocabulaire. Il ne +contient aucune commande : il explique ce que font les outils des +chapitres suivants. + +## Le problème : suivre les versions d'un document + +Tout le monde a déjà vu ce genre de dossier : + +``` +rapport.docx +rapport_v2.docx +rapport_v2_relu.docx +rapport_final.docx +rapport_final_VRAIMENT.docx +``` + +Cette méthode pose vite des questions sans réponse : + +- quelle est la bonne version ? +- qu'est-ce qui a changé entre deux versions, et pourquoi ? +- comment revenir en arrière si la dernière modification était une + erreur ? +- comment travailler à plusieurs sans écraser le travail des autres ? + +Un **logiciel de gestion de versions** répond à ces questions. Il +enregistre l'histoire d'un ensemble de fichiers : chaque modification +est datée, signée par son auteur et accompagnée d'une explication. On +peut consulter n'importe quelle version passée, comparer deux versions, +ou revenir à un état antérieur. + +**Git** est aujourd'hui le plus utilisé de ces logiciels. Il a été créé +en 2005 par Linus Torvalds, l'auteur du noyau Linux, pour gérer le code +source de ce noyau. Il sert aussi bien pour du code que pour de la +documentation : le support de cette formation est géré avec Git. + +## Le dépôt + +Un **dépôt** (*repository* en anglais) est un dossier dont Git suit +l'histoire. Il contient deux choses : + +- les fichiers eux-mêmes, que l'on ouvre et modifie normalement : c'est + la **copie de travail** ; +- un sous-dossier caché nommé `.git`, où Git range tout l'historique. + +``` +formation_linux\ <- le dépôt ++-- .git\ <- l'historique (géré par Git, ne pas toucher) ++-- README.md <- la copie de travail ++-- cours_2026\ ++-- ressources\ +``` + +Supprimer le dossier `.git` transforme le dépôt en simple dossier : les +fichiers restent, mais toute l'histoire est perdue. + +## Le commit + +Un **commit** est une photo de l'état des fichiers à un instant donné. +Chaque commit enregistre : + +- le contenu de tous les fichiers suivis ; +- l'auteur et la date ; +- un **message** qui explique la modification (« Corrige le lien vers + l'image de Debian ») ; +- un **identifiant** unique, une suite de 40 caractères comme + `08062fe2fc39d4a2...`, que l'on abrège en général à ses 7 premiers + caractères : `08062fe`. + +Les commits s'enchaînent : chacun connaît celui qui le précède. Leur +suite forme l'**historique** du dépôt. + +``` + 924cc0a <- 08062fe <- 13feee5 + (ancien) (récent) +``` + +Les identifiants semblent aléatoires : ils sont calculés à partir du +contenu du commit. Deux commits différents ont donc toujours deux +identifiants différents. + +## La branche + +Une **branche** est une ligne de développement : une suite de commits +qui porte un nom. Le dépôt de la formation a une branche principale, +`master`. Les auteurs créent d'autres branches pour préparer une +modification sans gêner la branche principale, puis les **fusionnent** +dans `master` une fois la modification terminée. + +Dans ce module, on se contente de suivre `master`. + +## Le dépôt distant et GitHub + +Git est **distribué** : chaque copie d'un dépôt contient l'historique +complet. Il n'y a pas de serveur indispensable. En pratique, on désigne +pourtant une copie de référence, hébergée sur un serveur accessible à +tous : c'est le **dépôt distant** (*remote*). + +**GitHub** est un service web qui héberge des dépôts Git. Le dépôt de +la formation s'y trouve, en accès public : + +``` +https://github.com/pguinet/formation_linux +``` + +Git et GitHub sont deux choses différentes : Git est le logiciel, +installé sur votre poste ; GitHub est un site qui héberge des dépôts et +ajoute des services autour (pages web, discussions, génération des PDF +de la formation...). + +## Cloner, mettre à jour, publier + +Trois opérations relient votre poste au dépôt distant : + +``` + cloner (une fois) + ----------------------------> + GitHub mettre à jour (pull) D:\PrenomNOM\ + dépôt distant ----------------------------> formation_linux + publier (push) + <---------------------------- +``` + +- **Cloner** (`clone`) : créer sur votre poste une copie complète du + dépôt distant, historique compris. On ne le fait qu'une fois. +- **Mettre à jour** (`pull`) : récupérer les nouveaux commits du dépôt + distant et avancer votre copie de travail jusqu'au dernier. On le fait + aussi souvent qu'on veut. +- **Publier** (`push`) : envoyer vos propres commits vers le dépôt + distant. Il faut pour cela des droits d'écriture sur le dépôt. + +Dans ce module, vous clonez le dépôt de la formation puis le mettez à +jour. Vous ne publiez rien : le dépôt est en lecture seule pour vous, et +c'est suffisant pour récupérer la dernière version des supports et des +scripts. + +## Les outils de ce module + +Git s'utilise de deux façons : + +- **en ligne de commande**, dans un terminal : `git clone`, `git pull`, + `git log`... C'est la façon la plus complète ; +- **avec des outils graphiques**, qui présentent les mêmes opérations + avec des fenêtres et des boutons. + +Le chapitre suivant installe **Git for Windows**, qui fournit les deux : + +| Outil | Rôle | +|-------|------| +| Git Bash | terminal bash, avec les commandes Linux et `git` | +| Git GUI | fenêtre pour cloner un dépôt et suivre les modifications | +| gitk | fenêtre pour parcourir l'historique des commits | + +## L'essentiel + +| Commande / Notion | Usage | +|-------------------|-------| +| Gestion de versions | Enregistrer l'histoire d'un ensemble de fichiers | +| Dépôt | Dossier suivi par Git : copie de travail + dossier caché `.git` | +| Copie de travail | Les fichiers du dépôt, ouverts et modifiés normalement | +| Commit | Photo des fichiers, avec auteur, date, message et identifiant | +| Historique | Suite des commits d'un dépôt | +| Branche | Suite de commits nommée ; `master` est la branche principale | +| Dépôt distant | Copie de référence, hébergée sur un serveur | +| GitHub | Service web qui héberge des dépôts Git | +| Cloner (`clone`) | Copier un dépôt distant sur son poste, une fois | +| Mettre à jour (`pull`) | Récupérer les nouveaux commits du dépôt distant | +| Publier (`push`) | Envoyer ses commits vers le dépôt distant (droits requis) | + +## Pour aller plus loin + +**Les trois zones de Git.** Quand on modifie des fichiers pour créer un +commit, Git distingue trois zones : la copie de travail (les fichiers +modifiés), l'**index** (les modifications choisies pour le prochain +commit) et le dépôt (les commits déjà enregistrés). On prépare un +commit en ajoutant des modifications à l'index (`git add`), puis on le +crée (`git commit`). Ce module n'en a pas besoin, puisqu'il ne crée pas +de commit. + +**Centralisé ou distribué.** Les anciens logiciels de gestion de +versions (CVS, Subversion) étaient centralisés : l'historique vivait sur +un serveur, et chaque poste n'en avait qu'une version. Avec Git, chaque +clone contient tout l'historique : on peut consulter les anciennes +versions sans réseau, et le dépôt survit à la perte du serveur. + +**Autres hébergeurs.** GitHub n'est pas le seul : GitLab, Bitbucket ou +Codeberg offrent des services comparables, et une entreprise peut +héberger ses propres dépôts. Pour Git, ce ne sont que des adresses de +dépôts distants. + +**Aller plus loin avec Git.** Le module additionnel « Git : contrôle de +version » enseigne Git en ligne de commande sous Linux : créer ses +propres dépôts, faire des commits, travailler avec des branches et à +plusieurs. + +## Exercices + +**Exercice 1.** Donnez trois questions auxquelles un logiciel de +gestion de versions permet de répondre. + +**Exercice 2.** Un dossier contient les fichiers d'un projet, mais pas +de sous-dossier `.git`. Est-ce un dépôt Git ? Que manque-t-il ? + +**Exercice 3.** Quelles informations un commit enregistre-t-il ? +Pourquoi parle-t-on souvent de `13feee5` plutôt que de l'identifiant +complet ? + +**Exercice 4.** Pour chaque situation, indiquez l'opération à utiliser +(cloner, mettre à jour ou publier) : + +1. Vous voulez une copie du dépôt de la formation sur votre poste. +2. Le formateur annonce une correction du script d'installation. +3. Vous avez corrigé une faute dans un chapitre et voulez l'envoyer sur + GitHub. + +**Exercice 5.** Expliquez en une phrase la différence entre Git et +GitHub. + +### Solutions + +**Solution 1.** Par exemple : quelle est la dernière version ? +qu'est-ce qui a changé entre deux versions, qui l'a changé et pourquoi ? +comment revenir à une version précédente ? Autre réponse possible : +comment travailler à plusieurs sans écraser le travail des autres ? + +**Solution 2.** Non. Les fichiers forment une copie de travail, mais +sans le dossier `.git` il n'y a pas d'historique : Git ne suit pas ce +dossier. + +**Solution 3.** Le contenu des fichiers suivis, l'auteur, la date, un +message explicatif et un identifiant unique. L'identifiant complet fait +40 caractères ; ses 7 premiers caractères suffisent en pratique à +désigner un commit sans ambiguïté, et sont plus faciles à lire et à +recopier. + +**Solution 4.** + +1. Cloner : on crée la copie une seule fois. +2. Mettre à jour (`pull`) : on récupère les nouveaux commits dans la + copie existante. +3. Publier (`push`) : il faut des droits d'écriture sur le dépôt. Sans + ces droits, on propose sa correction autrement, par exemple en la + signalant au formateur. + +**Solution 5.** Git est le logiciel de gestion de versions, installé +sur le poste ; GitHub est un site web qui héberge des dépôts Git et +ajoute des services autour. diff --git a/supports/modules_additionnels/module_git_windows/02_installer_git_portable.md b/supports/modules_additionnels/module_git_windows/02_installer_git_portable.md new file mode 100644 index 0000000..ac701a5 --- /dev/null +++ b/supports/modules_additionnels/module_git_windows/02_installer_git_portable.md @@ -0,0 +1,288 @@ +# Git sous Windows 2 — Installer Git sur le lecteur D + +> **Objectifs** : à la fin de ce chapitre, vous saurez : +> - télécharger et vérifier Git for Windows en version portable ; +> - l'extraire dans `D:\PrenomNOM\PortableGit`, où il survit au freeze ; +> - lancer Git Bash, Git GUI et gitk, et vérifier l'installation. +> +> **Durée en séance** : ~30 min. + +--- + +Les postes du CID sont figés : tout ce qui est installé sur `C:` +disparaît au redémarrage (voir l'annexe « Installer Debian 13 dans +VirtualBox »). Un Git installé de façon classique, dans +`C:\Program Files`, serait donc à réinstaller à chaque séance. + +Git for Windows existe heureusement en **version portable** : un +dossier autonome, qui fonctionne là où on le pose, sans installation ni +droits d'administrateur. Placé sur `D:`, il survit au freeze : on +l'installe une seule fois. + +## Ce que contient Git for Windows + +Git for Windows réunit : + +- **git**, le logiciel lui-même, utilisable en ligne de commande ; +- **Git Bash**, un terminal bash qui offre sous Windows les commandes + vues dans le cours Linux (`ls`, `cd`, `pwd`, `cat`...) en plus de + `git` ; +- **Git GUI**, une interface graphique pour cloner un dépôt, voir les + fichiers modifiés et créer des commits ; +- **gitk**, une interface graphique pour parcourir l'historique. + +La version portable contient tout cela, dans un dossier d'environ +400 Mo une fois extrait. + +## Télécharger la version portable + +La page officielle de téléchargement pour Windows est : + + + +Dans la rubrique « Portable ("thumbdrive edition") », choisir la version +64 bits. Le lien direct de la version vérifiée le 10 octobre 2026 est : + +- Fichier : `PortableGit-2.56.0.2-64-bit.7z.exe` (60 Mo) +- Lien : + +Enregistrer le fichier dans `D:\PrenomNOM\sources\`, à côté des +installeurs de VirtualBox. Une version plus récente convient aussi : seul +le nom du fichier change. + +### Vérifier le fichier + +Comme pour les fichiers de VirtualBox, on vérifie l'empreinte SHA256 du +téléchargement (la méthode est détaillée dans l'annexe VirtualBox, section +« Vérifier les fichiers téléchargés »). Dans une Invite de commandes : + +``` +cd /d D:\PrenomNOM\sources +certutil -hashfile PortableGit-2.56.0.2-64-bit.7z.exe SHA256 +``` + +L'empreinte attendue, relevée le 10 octobre 2026 sur le fichier +officiel, est : + +``` +075e158ef8e1f0ab80b347e245405d3eca735c2dc88fd8e032e137d0ca61f61b +``` + +Les empreintes officielles de chaque version sont publiées en bas de la +page de la version sur GitHub (lien « Releases » de +`github.com/git-for-windows/git`). + +## Extraire Git dans le dossier PortableGit + +Le fichier téléchargé est une archive auto-extractible : un programme +qui se décompresse lui-même. + +1. Double-cliquer sur `PortableGit-2.56.0.2-64-bit.7z.exe`. Si Windows + affiche « Windows a protégé votre ordinateur », cliquer sur + **Informations complémentaires**, puis **Exécuter quand même**. +2. Une petite fenêtre demande le dossier de destination. Remplacer le + chemin proposé par : + + ``` + D:\PrenomNOM\PortableGit + ``` + +3. Cliquer sur **OK**. L'extraction dure une à deux minutes. Une + fenêtre noire peut s'ouvrir brièvement à la fin : c'est le script de + finalisation de Git, qui se ferme seul. + +Aucune autorisation d'administrateur n'est demandée : tout se passe dans +votre dossier. + +Votre dossier ressemble maintenant à ceci : + +``` +D:\PrenomNOM\ ++-- PortableGit\ (Git for Windows, version portable) ++-- sources\ (installeurs, image de Debian, scripts) ++-- VirtualBox\ (la machine virtuelle) +``` + +L'archive `PortableGit-...7z.exe` peut rester dans `sources\` : elle +permet de réinstaller Git si le dossier `PortableGit` est abîmé. + +## Les programmes utiles + +Dans `D:\PrenomNOM\PortableGit`, trois programmes nous intéressent : + +| Programme | Emplacement | Rôle | +|-----------|-------------|------| +| Git Bash | `git-bash.exe` | terminal bash avec `git` | +| Git GUI | `cmd\git-gui.exe` | interface graphique principale | +| gitk | `cmd\gitk.exe` | historique des commits | + +On les lance par un double-clic dans l'Explorateur. Le menu Démarrer et +le bureau font partie du profil Windows, effacé au freeze : un raccourci +posé sur le bureau disparaîtrait. Pour un accès rapide, créer plutôt les +raccourcis dans `D:\PrenomNOM` : clic droit sur `git-bash.exe` ou +`git-gui.exe`, puis **Créer un raccourci** (sous Windows 11, d'abord +**Afficher d'autres options**), et déplacer le raccourci créé dans +`D:\PrenomNOM`. + +## Vérifier l'installation avec Git Bash + +Double-cliquer sur `git-bash.exe`. Une fenêtre de terminal s'ouvre, +avec une invite de ce genre : + +``` +PrenomNOM@POSTE-CID MINGW64 ~ +$ +``` + +Taper : + +```bash +git --version +``` + +Git affiche sa version : + +``` +git version 2.56.0.windows.2 +``` + +Git Bash utilise des chemins à la façon de Linux : le lecteur `D:` +s'écrit `/d`, et les barres obliques vont dans l'autre sens. + +```bash +cd /d/PrenomNOM +pwd +ls +``` + +`pwd` affiche `/d/PrenomNOM`, et `ls` liste `PortableGit`, `sources` et +`VirtualBox`. Les commandes de navigation sont celles du cours Linux +(voir chapitre 2.2). Taper `exit` pour fermer la fenêtre. + +## Découvrir Git GUI et gitk + +Double-cliquer sur `cmd\git-gui.exe`. Sans dépôt ouvert, Git GUI +affiche un écran d'accueil avec trois choix : + +- **Créer nouveau dépôt** ; +- **Cloner un dépôt existant** : c'est ce que fera le chapitre suivant ; +- **Ouvrir un dépôt existant**. + +Git GUI s'affiche dans la langue de Windows : en français sur les postes +du CID. Sur un Windows en anglais, les mêmes choix s'appellent « Create +New Repository », « Clone Existing Repository » et « Open Existing +Repository ». + +gitk, lui, a besoin d'un dépôt pour afficher son historique : on le +lancera depuis Git GUI, une fois le dépôt de la formation cloné. +Fermer Git GUI pour l'instant (menu **Dépôt > Quitter**). + +## L'essentiel + +| Commande / Notion | Usage | +|-------------------|-------| +| Version portable | Git dans un dossier autonome, sans installation ni droits admin | +| `PortableGit-...-64-bit.7z.exe` | Archive auto-extractible de la version portable | +| `D:\PrenomNOM\PortableGit` | Dossier de Git, conservé malgré le freeze | +| `certutil -hashfile FICHIER SHA256` | Calculer l'empreinte d'un fichier sous Windows | +| `git-bash.exe` | Terminal bash avec `git` et les commandes Linux | +| `cmd\git-gui.exe` | Interface graphique principale de Git | +| `cmd\gitk.exe` | Interface graphique de l'historique | +| `git --version` | Afficher la version de Git installée | +| `/d/PrenomNOM` | Chemin de `D:\PrenomNOM` dans Git Bash | + +## Pour aller plus loin + +**Déclarer son identité.** Pour créer des commits, Git a besoin d'un nom +et d'une adresse électronique. La commande habituelle, +`git config --global`, enregistre ces réglages dans le profil Windows, +sur `C:` : ils disparaîtraient au freeze. Avec la version portable, on +peut les enregistrer dans le dossier de Git lui-même, sur `D:`, avec +l'option `--system` : + +```bash +git config --system user.name "Prénom Nom" +git config --system user.email "prenom.nom@example.org" +git config --system --list +``` + +Ce module ne crée pas de commit : cette étape est facultative. + +**Les trois niveaux de configuration.** Git lit ses réglages à trois +endroits, du plus général au plus précis : `--system` (le dossier de +Git, ici `PortableGit\etc\gitconfig`), `--global` (le profil de +l'utilisateur) et `--local` (le dépôt, dans `.git\config`). Un réglage +plus précis l'emporte sur un réglage plus général. + +**Git en dehors de Git Bash.** Le dossier `PortableGit\cmd` contient +aussi `git.exe`, utilisable depuis une Invite de commandes ou depuis un +script `.bat` en donnant son chemin complet : + +``` +D:\PrenomNOM\PortableGit\cmd\git.exe --version +``` + +C'est ainsi que le lanceur du chapitre 4 appelle Git. + +**Installation classique.** Sur un poste personnel, l'installeur +habituel de Git for Windows (même page de téléchargement) installe Git +pour tous les utilisateurs, ajoute Git Bash et Git GUI au menu Démarrer +et au clic droit de l'Explorateur, et propose de nombreuses options. Au +CID, la version portable reste préférable à cause du freeze. + +## Exercices + +**Exercice 1.** Pourquoi installe-t-on Git en version portable sur `D:` +plutôt qu'avec l'installeur classique ? + +**Exercice 2.** Téléchargez la version portable, vérifiez son empreinte +et extrayez-la dans `D:\PrenomNOM\PortableGit`. + +**Exercice 3.** Dans Git Bash, affichez la version de Git, puis placez +vous dans votre dossier sur `D:` et listez son contenu. + +**Exercice 4.** Créez dans `D:\PrenomNOM` un raccourci vers Git GUI, +puis ouvrez Git GUI avec ce raccourci. Quels sont les trois choix de +l'écran d'accueil ? + +**Exercice 5.** Dans Git Bash, quel est le chemin du dossier +`D:\PrenomNOM\sources` ? Vérifiez-le avec `ls`. + +### Solutions + +**Solution 1.** Le disque `C:` est remis à zéro à chaque redémarrage : +un Git installé dans `C:\Program Files` disparaîtrait d'une séance à +l'autre. La version portable, posée sur `D:`, est conservée et +fonctionne sans droits d'administrateur. + +**Solution 2.** Suivre les sections « Télécharger la version +portable », « Vérifier le fichier » et « Extraire Git ». La commande +`certutil` doit afficher l'empreinte attendue ; sinon, supprimer le +fichier et le télécharger à nouveau. + +**Solution 3.** + +```bash +git --version +cd /d/PrenomNOM +ls +``` + +La première commande affiche `git version 2.56.0.windows.2` (ou une +version plus récente) ; `ls` liste `PortableGit`, `sources` et +`VirtualBox`. + +**Solution 4.** Dans `D:\PrenomNOM\PortableGit\cmd`, clic droit sur +`git-gui.exe`, **Créer un raccourci** (sous Windows 11, d'abord +**Afficher d'autres options**), puis déplacer le raccourci dans `D:\PrenomNOM`. Un double-clic ouvre Git GUI, +qui propose : **Créer nouveau dépôt**, **Cloner un dépôt existant** et +**Ouvrir un dépôt existant**. + +**Solution 5.** `/d/PrenomNOM/sources` : + +```bash +ls /d/PrenomNOM/sources +``` + +La commande liste les installeurs de VirtualBox, l'image de Debian, le +script `installer_virtualbox.bat` et l'archive de Git portable. diff --git a/supports/modules_additionnels/module_git_windows/03_cloner_depot.md b/supports/modules_additionnels/module_git_windows/03_cloner_depot.md new file mode 100644 index 0000000..ce98f0f --- /dev/null +++ b/supports/modules_additionnels/module_git_windows/03_cloner_depot.md @@ -0,0 +1,277 @@ +# Git sous Windows 3 — Cloner le dépôt de la formation + +> **Objectifs** : à la fin de ce chapitre, vous saurez : +> - cloner le dépôt de la formation dans `D:\PrenomNOM\formation_linux` avec Git GUI ; +> - parcourir son historique avec gitk ; +> - faire les mêmes opérations dans Git Bash et mettre le dépôt à jour. +> +> **Durée en séance** : ~30 min. + +--- + +Git est installé sur `D:` (voir chapitre Git sous Windows 2). On peut +maintenant récupérer une copie du dépôt de la formation : tous les +chapitres, les annexes, les scripts, et leur historique complet. + +Le dépôt est public : aucun compte GitHub n'est nécessaire pour le +cloner ni pour le mettre à jour. + +## L'adresse du dépôt + +Sur GitHub, chaque dépôt a une adresse de clonage, qui se termine par +`.git`. Celle du dépôt de la formation est : + +``` +https://github.com/pguinet/formation_linux.git +``` + +On la retrouve sur la page du dépôt, avec le bouton vert **Code**, +onglet **HTTPS**. + +Le clone sera rangé dans votre dossier sur `D:`, à côté des autres : + +``` +D:\PrenomNOM\ ++-- formation_linux\ (le dépôt cloné) ++-- PortableGit\ ++-- sources\ ++-- VirtualBox\ +``` + +## Cloner avec Git GUI + +1. Lancer Git GUI (`D:\PrenomNOM\PortableGit\cmd\git-gui.exe`, ou le + raccourci créé au chapitre précédent). +2. Sur l'écran d'accueil, cliquer sur **Cloner un dépôt existant**. +3. Remplir la fenêtre de clonage : + - **Emplacement source** : `https://github.com/pguinet/formation_linux.git` + - **Répertoire cible** : `D:/PrenomNOM/formation_linux` + - **Type de clonage** : laisser **Standard**. +4. Cliquer sur **Cloner**. + +Deux précautions pour le répertoire cible : + +- écrire le chemin avec des barres obliques `/`, comme sur la ligne + ci-dessus : Git GUI les comprend sans ambiguïté ; +- le dossier `formation_linux` **ne doit pas exister** : Git GUI le + crée. S'il existe déjà, Git GUI refuse avec le message « L'emplacement + ... existe déjà ». + +Le téléchargement prend une à deux minutes : le dépôt contient les +captures d'écran des annexes. Une barre de progression s'affiche. + +À la fin, Git GUI ouvre sa fenêtre principale sur le dépôt cloné : + +- en haut à gauche, **Modifs. non indexées** : les fichiers modifiés + depuis le dernier commit (la liste est vide, puisque rien n'a été + modifié) ; +- en dessous, **Modifs. indexées (pour commit)** : les modifications + choisies pour le prochain commit (vide aussi) ; +- à droite, la zone qui affiche le détail des modifications, et en bas + la zone du message de commit. + +Ce module ne crée pas de commit : ces zones resteront vides. + +Le menu **Dépôt > Explorer la copie de travail** ouvre le dossier +`D:\PrenomNOM\formation_linux` dans l'Explorateur Windows. + +## Parcourir l'historique avec gitk + +Dans Git GUI, menu **Dépôt > Visualiser l'historique de la branche +courante**. gitk s'ouvre en trois parties : + +- **en haut**, la liste des commits, du plus récent au plus ancien : + message, auteur et date. Les fusions de branches apparaissent comme + des lignes qui se rejoignent, à gauche ; +- **en bas à gauche**, le détail du commit sélectionné : identifiant, + message complet, puis les lignes modifiées (en rouge les lignes + retirées, en vert les lignes ajoutées) ; +- **en bas à droite**, la liste des fichiers touchés par ce commit. + +Cliquer sur quelques commits récents : on retrouve par exemple +« Le script lance VirtualBox sur la liste des machines », avec les +modifications de `installer_virtualbox.bat`. + +gitk ne modifie rien : on peut cliquer partout sans risque. Le fermer +quand on a fini. + +## Cloner avec Git Bash + +Git GUI exécute en réalité des commandes `git`. Voici les mêmes +opérations en ligne de commande, dans Git Bash. Elles ne sont à faire +que si le dépôt n'a pas déjà été cloné avec Git GUI (un dossier +`formation_linux` existant ferait échouer le clonage). + +```bash +cd /d/PrenomNOM +git clone https://github.com/pguinet/formation_linux.git +cd formation_linux +``` + +`git clone` crée le dossier `formation_linux`, du nom du dépôt, et y +télécharge tout l'historique. On consulte ensuite le dépôt : + +```bash +# État de la copie de travail +git status + +# Les cinq derniers commits, une ligne par commit +git log --oneline -5 + +# L'adresse du dépôt distant +git remote -v +``` + +`git status` indique la branche courante (`master`) et précise que la +copie de travail est propre : aucun fichier modifié. `git log` affiche +les commits avec leur identifiant abrégé. `git remote -v` montre que le +dépôt distant s'appelle `origin` : c'est le nom que Git donne +automatiquement au dépôt d'où l'on a cloné. + +## Mettre à jour le dépôt + +Le dépôt de la formation évolue : corrections, nouveaux chapitres, +améliorations des scripts. Pour récupérer les nouveautés, on met à jour +son clone. + +**Dans Git Bash** : + +```bash +cd /d/PrenomNOM/formation_linux +git pull +``` + +`git pull` télécharge les nouveaux commits du dépôt distant et avance la +copie de travail. S'il n'y a rien de nouveau, Git répond +`Already up to date.` + +**Dans Git GUI**, la mise à jour se fait en deux temps : + +1. menu **Dépôt distant > Récupérer de > origin** : Git télécharge les + nouveaux commits, sans encore toucher aux fichiers ; +2. menu **Fusionner > Fusion locale...**, choisir `origin/master`, puis + **Fusionner** : la copie de travail avance jusqu'au dernier commit. + +Le chapitre suivant automatise cette mise à jour : elle sera faite à +chaque séance, au moment de réinstaller VirtualBox. + +### Ne pas modifier les fichiers du dépôt + +Le clone est une copie de consultation. Si vous modifiez un fichier du +dépôt, la mise à jour suivante peut refuser de s'appliquer, pour ne pas +écraser votre modification. Pour annoter un chapitre ou adapter un +script, copiez-le d'abord ailleurs, par exemple dans `D:\PrenomNOM`. + +Si un fichier a été modifié par erreur, `git status` le signale, et une +commande le remet dans l'état du dernier commit : + +```bash +git restore cours_2026/annexes/installation_virtualbox.md +``` + +## L'essentiel + +| Commande / Notion | Usage | +|-------------------|-------| +| `https://github.com/pguinet/formation_linux.git` | Adresse de clonage du dépôt de la formation | +| Git GUI : Cloner un dépôt existant | Cloner un dépôt avec l'interface graphique | +| Git GUI : Dépôt > Visualiser l'historique... | Ouvrir gitk sur le dépôt | +| `git clone URL` | Cloner un dépôt dans un nouveau dossier | +| `git status` | État de la copie de travail | +| `git log --oneline -5` | Les cinq derniers commits, en abrégé | +| `git remote -v` | Adresse du dépôt distant (`origin`) | +| `git pull` | Mettre à jour le dépôt depuis le dépôt distant | +| Git GUI : Récupérer de, puis Fusion locale | Mettre à jour le dépôt avec l'interface graphique | +| `git restore FICHIER` | Annuler la modification d'un fichier | + +## Pour aller plus loin + +**Le message « dubious ownership ».** Sur certains disques, Git refuse +de travailler dans le dépôt et affiche `detected dubious ownership in +repository`. C'est une protection : le dossier appartient, pour +Windows, à un autre compte que le vôtre. Si le dossier est bien le +vôtre, on autorise ce dépôt précis (l'option `--system` garde le réglage +sur `D:`, voir chapitre Git sous Windows 2) : + +```bash +git config --system --add safe.directory D:/PrenomNOM/formation_linux +``` + +**Le clonage échoue faute de réseau.** Si `git clone` ou `git pull` +affiche `Could not resolve host: github.com` ou attend sans fin, le +poste n'accède pas à GitHub. Vérifier l'accès à Internet dans un +navigateur. Si le réseau passe par un proxy, le formateur indique son +adresse, que l'on déclare à Git : + +```bash +git config --system http.proxy http://ADRESSE:PORT +``` + +**Télécharger sans Git.** Le bouton **Code > Download ZIP** de GitHub +télécharge les fichiers de la dernière version, sans historique et sans +possibilité de mise à jour : il faut tout retélécharger à chaque +changement. Le clone, lui, ne télécharge ensuite que les nouveautés. + +**Voir une ancienne version d'un fichier.** gitk permet de se placer sur +un ancien commit et d'afficher l'état d'un fichier à ce moment-là. En +ligne de commande : + +```bash +git log --oneline -- ressources/scripts/installer_virtualbox.bat +git show 6b4ee7b:ressources/scripts/installer_virtualbox.bat +``` + +La première commande liste les commits qui ont modifié le script ; la +seconde affiche le script tel qu'il était dans le commit indiqué. + +## Exercices + +**Exercice 1.** Clonez le dépôt de la formation dans +`D:\PrenomNOM\formation_linux` avec Git GUI. + +**Exercice 2.** Avec gitk, retrouvez le commit le plus récent. Qui en +est l'auteur, et quels fichiers a-t-il modifiés ? + +**Exercice 3.** Dans Git Bash, placez-vous dans le dépôt et affichez : +l'état de la copie de travail, les trois derniers commits, et l'adresse +du dépôt distant. + +**Exercice 4.** Où se trouve le script `installer_virtualbox.bat` dans +le dépôt ? Affichez ses dix premières lignes dans Git Bash. + +**Exercice 5.** Mettez le dépôt à jour, une fois avec Git Bash, une +fois avec Git GUI. Que répond Git s'il n'y a rien de nouveau ? + +### Solutions + +**Solution 1.** Git GUI, **Cloner un dépôt existant**, Emplacement +source `https://github.com/pguinet/formation_linux.git`, Répertoire +cible `D:/PrenomNOM/formation_linux`, type Standard, puis **Cloner**. +Le dossier `formation_linux` ne doit pas exister avant. + +**Solution 2.** Dans Git GUI, **Dépôt > Visualiser l'historique de la +branche courante**. Le commit le plus récent est en haut de la liste ; +son auteur et sa date figurent sur la même ligne, et la liste des +fichiers modifiés apparaît en bas à droite quand on le sélectionne. + +**Solution 3.** + +```bash +cd /d/PrenomNOM/formation_linux +git status +git log --oneline -3 +git remote -v +``` + +**Solution 4.** Dans `ressources/scripts/` : + +```bash +head -n 10 ressources/scripts/installer_virtualbox.bat +``` + +`head` est la commande vue au chapitre 4.1 du cours Linux. + +**Solution 5.** Dans Git Bash : `git pull`. Dans Git GUI : **Dépôt +distant > Récupérer de > origin**, puis **Fusionner > Fusion +locale...**, `origin/master`, **Fusionner**. S'il n'y a rien de +nouveau, `git pull` répond `Already up to date.` diff --git a/supports/modules_additionnels/module_git_windows/04_lanceur_sources.md b/supports/modules_additionnels/module_git_windows/04_lanceur_sources.md new file mode 100644 index 0000000..40da003 --- /dev/null +++ b/supports/modules_additionnels/module_git_windows/04_lanceur_sources.md @@ -0,0 +1,253 @@ +# Git sous Windows 4 — Un lanceur toujours à jour dans sources + +> **Objectifs** : à la fin de ce chapitre, vous saurez : +> - expliquer pourquoi la copie du script dans `sources\` vieillit ; +> - installer le lanceur `lancer_installation.bat` dans `sources\` ; +> - l'utiliser à chaque séance pour mettre à jour le dépôt et lancer la dernière version du script. +> +> **Durée en séance** : ~30 min. + +--- + +À chaque séance, on réinstalle VirtualBox en double-cliquant sur le +script `installer_virtualbox.bat` de `D:\PrenomNOM\sources\` (voir l'annexe +« Installer Debian 13 dans VirtualBox »). Ce fichier est une copie, +téléchargée une fois. Or le script évolue : détection de Visual C++ déjà +présent, lancement automatique de VirtualBox... Votre copie, elle, reste +figée dans la version du jour où vous l'avez téléchargée. + +Le dépôt cloné au chapitre précédent contient toujours la dernière +version du script, à condition de le mettre à jour. Ce chapitre met en +place un **lanceur** qui fait les deux d'un coup : il met le dépôt à +jour, puis lance la version du script qui s'y trouve. + +## Pourquoi pas un simple raccourci ? + +L'idée la plus simple serait un raccourci Windows, dans `sources\`, vers +le script du dépôt : + +``` +D:\PrenomNOM\formation_linux\ressources\scripts\installer_virtualbox.bat +``` + +Cela ne fonctionne pas : le script cherche les installeurs de +VirtualBox **dans son propre dossier**. Lancé depuis le dépôt, il les +chercherait dans `ressources\scripts\`, ne les trouverait pas, et +s'arrêterait avec le message « Il manque au moins un fichier ». + +Le script accepte donc un **paramètre** : le dossier des installeurs. +Sans paramètre, il cherche dans son dossier, comme avant. Avec un +paramètre, il cherche dans le dossier indiqué. Le lanceur s'en sert pour +lancer le script du dépôt en lui indiquant `sources\`. + +Autre avantage : le raccourci lancerait un script qui n'est jamais mis à +jour, alors que le lanceur commence par un `git pull`. + +## Ce que fait le lanceur + +Le lanceur `lancer_installation.bat` fait partie du dépôt, dans +`ressources\scripts\`, à côté du script d'installation. Une fois copié +dans `sources\`, il : + +1. vérifie que le dépôt existe dans `D:\PrenomNOM\formation_linux` ; +2. met le dépôt à jour avec Git portable + (`D:\PrenomNOM\PortableGit\cmd\git.exe`), comme un `git pull` dans + Git Bash ; +3. lance le script `installer_virtualbox.bat` du dépôt, en lui + indiquant le dossier `sources\` où se trouvent les installeurs. + +Si la mise à jour est impossible (pas de réseau, Git absent), le lanceur +affiche un avertissement et lance quand même la version du script déjà +présente dans le dépôt : l'installation de VirtualBox n'est jamais +bloquée par Git. + +Le cœur du lanceur tient en quelques lignes : + +``` +set "SOURCES=%~dp0" +for %%I in ("%~dp0..") do set "BASE=%%~fI" +set "GIT=%BASE%\PortableGit\cmd\git.exe" +set "DEPOT=%BASE%\formation_linux" +set "SCRIPT=%DEPOT%\ressources\scripts\installer_virtualbox.bat" + +"%GIT%" -C "%DEPOT%" pull --ff-only +call "%SCRIPT%" "%SOURCES:~0,-1%" +``` + +- `%~dp0` est le dossier du lanceur (`D:\PrenomNOM\sources\`), et la + ligne `for` en déduit le dossier parent, `D:\PrenomNOM` : le lanceur + fonctionne quel que soit le nom de votre dossier ; +- `git -C DOSSIER pull` met à jour le dépôt situé dans `DOSSIER`, sans + avoir à s'y déplacer ; +- `--ff-only` n'autorise que l'avance simple du dépôt : si des fichiers + du dépôt ont été modifiés à la main, Git refuse sans rien écraser (voir + chapitre Git sous Windows 3) ; +- `call` lance le script du dépôt et lui passe le dossier `sources\` + (sans sa barre finale) en paramètre. + +Le fichier complet ajoute les vérifications et les messages d'erreur. +Son contenu est consultable dans le dépôt, avec n'importe quel éditeur +de texte ou dans Git Bash : + +```bash +cat /d/PrenomNOM/formation_linux/ressources/scripts/lancer_installation.bat +``` + +## Installer le lanceur dans sources + +Une seule fois, copier le lanceur du dépôt vers `sources\`. + +**Dans l'Explorateur** : ouvrir +`D:\PrenomNOM\formation_linux\ressources\scripts\`, clic droit sur +`lancer_installation.bat`, **Copier**, puis ouvrir +`D:\PrenomNOM\sources\` et **Coller**. Il faut bien copier, et non +déplacer : le fichier doit rester dans le dépôt, sinon Git le +signalerait comme supprimé. + +**Dans Git Bash**, la même opération : + +```bash +cp /d/PrenomNOM/formation_linux/ressources/scripts/lancer_installation.bat /d/PrenomNOM/sources/ +``` + +Le dossier `sources\` contient maintenant : + +``` +D:\PrenomNOM\sources\ ++-- Oracle_VirtualBox_Extension_Pack-7.2.20.vbox-extpack ++-- VirtualBox-7.2.20-175154-Win.exe ++-- debian-13.7.0-amd64-DVD-1.iso ++-- PortableGit-2.56.0.2-64-bit.7z.exe ++-- installer_virtualbox.bat (ancienne copie, gardée en secours) ++-- lancer_installation.bat (le lanceur) +``` + +L'ancienne copie `installer_virtualbox.bat` peut rester : elle sert de +secours si le dépôt est abîmé. + +Le lanceur lui-même change rarement : c'est le script qu'il lance qui +évolue, et celui-là est mis à jour à chaque séance. + +## À chaque séance + +Au début de chaque séance, au lieu de lancer `installer_virtualbox.bat` : + +1. Double-cliquer sur `D:\PrenomNOM\sources\lancer_installation.bat`. +2. Le lanceur affiche la mise à jour du dépôt : + + ``` + Depot : D:\PrenomNOM\formation_linux + Already up to date. + OK : depot a jour. + ``` + + ou, s'il y a des nouveautés, la liste des fichiers mis à jour. +3. Le script d'installation prend le relais, exactement comme avant : + installation de VirtualBox, réenregistrement de la VM, lancement de + VirtualBox et résumé final. + +Le dossier des installeurs affiché par le script est bien +`D:\PrenomNOM\sources\`, même si le script lancé est celui du dépôt. + +## En cas de problème + +| Message du lanceur | Cause et solution | +|--------------------|-------------------| +| `Depot introuvable` | Le dépôt n'est pas dans `D:\PrenomNOM\formation_linux` : le cloner (chapitre Git sous Windows 3), ou lancer en attendant `installer_virtualbox.bat` | +| `Git introuvable` | Git portable n'est pas dans `D:\PrenomNOM\PortableGit` : l'extraire (chapitre Git sous Windows 2). Le script présent est lancé quand même | +| `Mise a jour impossible` | Pas de réseau, ou fichiers du dépôt modifiés : vérifier avec `git status` dans Git Bash. Le script présent est lancé quand même | +| `Script introuvable dans le depot` | Le dépôt est incomplet : le supprimer et le cloner à nouveau | + +## L'essentiel + +| Commande / Notion | Usage | +|-------------------|-------| +| `lancer_installation.bat` | Lanceur : met à jour le dépôt puis lance le script d'installation | +| `ressources\scripts\` | Dossier du dépôt qui contient le lanceur et le script | +| `installer_virtualbox.bat DOSSIER` | Lancer le script en lui indiquant le dossier des installeurs | +| `%~dp0` | Dans un `.bat`, le dossier du script en cours | +| `git -C DOSSIER pull` | Mettre à jour le dépôt situé dans `DOSSIER` | +| `--ff-only` | N'accepter que l'avance simple, sans écraser de modification | +| `cp SOURCE DESTINATION` | Copier un fichier dans Git Bash | + +## Pour aller plus loin + +**Lancer le script du dépôt à la main.** Le paramètre du script peut +servir sans le lanceur, depuis une Invite de commandes : + +``` +D:\PrenomNOM\formation_linux\ressources\scripts\installer_virtualbox.bat D:\PrenomNOM\sources +``` + +C'est exactement ce que fait le lanceur, après la mise à jour. + +**Mettre aussi les PDF à jour.** Le dépôt contient les sources des +supports, au format Markdown (`.md`), lisibles dans n'importe quel +éditeur de texte. Les PDF, eux, ne sont pas dans le dépôt : ils sont +générés automatiquement et publiés dans les « Releases » du dépôt sur +GitHub, où l'on télécharge toujours la dernière version. + +**Pourquoi pas un lien symbolique ?** Windows sait créer des liens +symboliques (commande `mklink`), qui feraient apparaître le script du +dépôt dans `sources\`. Mais leur création demande en général des droits +d'administrateur, que les postes du CID n'accordent pas. Le lanceur +n'a pas cette contrainte. + +**Adapter le lanceur.** Le lanceur suppose les noms de dossiers de ce +module : `PortableGit`, `formation_linux` et `sources`, tous trois dans +le même dossier parent. Pour une autre organisation, copier le lanceur +ailleurs que dans le dépôt (pour ne pas bloquer les mises à jour), puis +modifier les lignes `set "GIT=..."` et `set "DEPOT=..."`. + +## Exercices + +**Exercice 1.** Expliquez pourquoi un raccourci vers le script du dépôt +ne suffit pas pour réinstaller VirtualBox. + +**Exercice 2.** Copiez le lanceur dans `sources\`, avec l'Explorateur ou +avec Git Bash. Vérifiez ensuite avec `git status` que le dépôt n'a pas +été modifié. + +**Exercice 3.** Lancez `lancer_installation.bat`. Quelle ligne indique +que le dépôt a été mis à jour ? Quel dossier des installeurs le script +affiche-t-il ? + +**Exercice 4.** Dans le lanceur, quelle ligne met le dépôt à jour ? +Quel est le rôle de l'option `--ff-only` ? + +**Exercice 5.** Que se passe-t-il si vous lancez le lanceur sans réseau ? +L'installation de VirtualBox est-elle bloquée ? + +### Solutions + +**Solution 1.** Le script cherche les installeurs de VirtualBox dans son +propre dossier. Lancé depuis le dépôt (même par un raccourci), il les +chercherait dans `ressources\scripts\` et s'arrêterait faute de +fichiers. De plus, un raccourci ne met pas le dépôt à jour. + +**Solution 2.** Avec Git Bash : + +```bash +cp /d/PrenomNOM/formation_linux/ressources/scripts/lancer_installation.bat /d/PrenomNOM/sources/ +cd /d/PrenomNOM/formation_linux +git status +``` + +`git status` indique que la copie de travail est propre : une copie ne +modifie pas le dépôt. Un déplacement, lui, ferait apparaître le lanceur +comme supprimé. + +**Solution 3.** La ligne `OK : depot a jour.` confirme la mise à jour +(précédée de `Already up to date.` s'il n'y avait rien de nouveau). Le +script affiche `Dossier des installeurs : D:\PrenomNOM\sources\`. + +**Solution 4.** La ligne `"%GIT%" -C "%DEPOT%" pull --ff-only`. +L'option `--ff-only` n'accepte que l'avance simple du dépôt jusqu'aux +nouveaux commits : si des fichiers du dépôt ont été modifiés à la main, +la mise à jour est refusée plutôt que d'écraser ou de mélanger les +modifications. + +**Solution 5.** `git pull` échoue : le lanceur affiche « Mise a jour +impossible » puis lance quand même la version du script déjà présente +dans le dépôt. L'installation de VirtualBox se fait normalement, avec +la version du script récupérée lors de la dernière mise à jour.