Bienvenu à toi, lecteur ! Ce TP a pour objectif de t'aider à prendre en main Git en mettant les mains dans le cambouis. Mais surtout pas de panique si tu n'as jamais utilisé Git ! Ce TP reprend tout depuis le début, mais a été pensé pour faire suite à une présentation théorique.
Pour pouvoir faire ce TP, il te faudra le logiciel Git installé sur ton ordinateur :
- Si tu es sous Linux ou Mac, git est normalement déjà installé.
- Si tu es sous Windaube, je te conseille d'installer Linux (ou WSL ou GitBash si vraiment tu veux rester sur ce faux OS).
- Node.js installé sur votre machine pour exécuter les exemples JavaScript.
Ce TP va aussi utiliser l'éditeur de code VSCode. Je te conseille de l'utiliser aussi pour plus de clarté mais tu peux utiliser un autre éditeur de code comme WebStorm ou PHPStorm.
Maintenant que les prérequis sont installés, il est temps de se lancer !
Avant de pouvoir utiliser Git, il y a quelques configurations à faire.
Pour que les modifications que tu feras sur le repository soient identifiables, il faut fournir un nom et une adresse email. Pour faire cette configuration, ouvre GitBash (ou un terminal pour Mac/Linux) et entre les commandes suivantes en remplaçant nom et adresse email :
git config --global user.name "<votre nom>"
git config --global user.email "<votre adresse email>"Git sait maintenant qui tu es et le nom choisi sera associé aux modifications que tu feras.
Il est recommandé de configurer un éditeur par défaut pour Git :
git config --global core.editor "code --wait"Cette commande configure VSCode comme éditeur par défaut.
(à toi de chercher un peu sur la doc de Github, elle est giga bien faite)
Si ce n'est pas déjà fait, initialise ce dossier comme un repository Git :
git initVérifie le statut de ton repository :
git statusAjoute le fichier README.md à l'index Git :
git add README.mdCrée ton premier commit :
git commit -m ":tada: Initial commit: Add README"Vérifie l'historique des commits :
git logDans un repo git, l'édition des fichiers se fait comme dans un dossier classique. Mais cette modification en local doit ensuite être synchronisée avec le serveur.
Voici ci-dessous une ligne moche et inutile. Sauras-tu la supprimer ?
Cette ligne est moche et inutile, supprime-la !
Il existe aussi un module git intégré à VSCode, je t'encourage à essayer de l'utiliser pour supprimer la deuxième ligne moche et inutile ci-dessous.
Cette ligne est aussi moche et inutile, supprime-la !
Pour vérifier tes modifications :
git status
git diffPour ajouter et commiter tes modifications :
git add README.md
git commit -m "Remove useless lines from README"Ta deuxième mission est de créer un fichier solutions.md à la racine du repo (à côté du README.md) et d'y ajouter la démarche que tu as suivie pour réussir la mission précédente. (en gros tu retapes les commandes dans le fichier)
Remarque : L'extension de fichier .md signifie Markdown. Ce format permet de faire un peu de mise en page simple de fichier texte. Tu peux utiliser le raccourci Ctrl+Shift+V dans VSCode pour visualiser ce type de fichier.
Une fois le fichier créé, n'oublie pas de créer un commit (ajoute un gitmoji pour que ce soit encore plus cool) :
git add solutions.md
git commit -m "Add solutions documentation"Il y a dans le repo un fichier nommé fichier_inutile.txt. Sauras-tu le supprimer du repo Git ?
git rm fichier_inutile.txt
git commit -m "Remove useless file"Les quelques commandes que tu viens d'utiliser (git status, git add, git commit, git log) sont les commandes que tu utiliseras 95% du temps avec Git.
Pour pouvoir travailler séparément sur des features différentes, on utilise des branches. Cette fonctionnalité est particulièrement pratique pour faire avancer en même temps plusieurs versions du même code qui implémentent des fonctionnalités différentes.
Crée une branche et place-toi sur cette nouvelle branche :
git branch feature-emoji
git checkout feature-emoji
# Ou en une seule commande :
# git checkout -b feature-emojiMaintenant on doit utiliser la commande
git switch), essaye de l'utiliser aussi ça pourra être utile :)
Vérifie que cette branche est bien sélectionnée :
git branchConsulte le code JavaScript de code/main.js. Il remplace des mots courants par leur équivalent emoji.
Si tu veux exécuter ton code mais tu as une erreur de module : Il faut installer les modules Node.js avec la commande :
npm installCette commande va installer tous les modules JavaScript listés dans le fichier package.json.
Complète le dictionnaire wordToEmoji avec quelques emojis supportés. Tu peux trouver la liste ici.
Si tu as exécuté le fichier JavaScript node code/main.js, tu as peut-être pu remarquer l'apparition du dossier node_modules. Ces fichiers ne sont pas intéressants à versionner avec Git (car pas nécessaires - ils peuvent être régénérés avec npm install). Il faut donc ajouter un .gitignore pour les ignorer : vérifie que le fichier .gitignore à la racine du repo contient bien node_modules/.
Commit et push tes changements :
git add .
git commit -m "Add emoji functionality to main.js"Si tu fais un git status, est-ce que tout te semble ok ? si oui alors passe à la suite. Si non, qu'est-ce qu'il faut retirer ?
Retourne sur la branche principale :
git checkout main
# ou git checkout master selon le nom de ta branche principaleFusionne ta branche feature :
git merge feature-emojiLà pour rappel du vas fusionner la branche
feature-emojidans ta branchemain, car tu est sur la branchemainlà
Supprime la branche devenue inutile :
git branch -d feature-emojiSi tu mets pas le
-dça créé la branche et si tu ajoutes le-dça veut dire 'delete' le branch, logique non ?
Crée deux branches à partir de main :
git checkout -b branch-a
# Modifie le fichier code/main.js
git add .
git commit -m "Modify emoji dictionary - version A"
git checkout main
git checkout -b branch-b
# Modifie la même ligne du fichier code/main.js différemment
git add .
git commit -m "Modify emoji dictionary - version B"Retourne sur main et essaie de fusionner les deux branches :
git checkout main
git merge branch-a
git merge branch-b # Ceci va créer un conflit !Git t'indiquera qu'il y a un conflit. Ouvre le fichier en conflit dans VSCode et résous-le manuellement. VSCode t'aidera en affichant clairement les conflits.
Une fois résolu :
git add .
git commit -m "Resolve merge conflict"Bon là c'est facile car tu as une seule ligne, sur des projets plus gros ce sera peut-être des fois des dixaines de lignes. Git est assez intélligent pour en regler automatiquement certaines mais sinon ce sera à toi de le faire à chaque fois :(
git log --oneline --graph --allPour voir un commit précédent :
git checkout <hash-du-commit>Pour revenir au dernier commit :
git checkout mainPour annuler des modifications non commitées :
git checkout -- <nom-du-fichier>Pour annuler le dernier commit (en gardant les modifications) :
git reset --soft HEAD~1Si tu veux synchroniser avec un repository distant (GitHub, GitLab, etc.) :
git remote add origin <URL-du-repository>git push -u origin maingit pull origin mainBien sûr, on n'a abordé qu'une petite partie de Git, mais ce que tu viens de voir c'est vraiment la base !
Dernier conseil : Git réserve parfois quelques situations un peu complexes, notamment lorsque des conflits se créent entre deux modifications. Il faut alors les résoudre à la main (heureusement VSCode aide en affichant les conflits). Et pense à bien regarder ce que Git te donne comme infos, en général la démarche à suivre pour résoudre l'erreur est dans le message d'erreur.
Tu vas simuler un workflow de développement en équipe en ajoutant plusieurs features au convertisseur emoji :
-
Feature A - Interface web : Crée une branche
feature/web-uiet développe :- Un fichier
web/index.htmlavec une zone de texte et affichage en temps réel - Un fichier
web/style.csspour styliser l'interface - Un fichier
web/app.jsqui utilise le convertisseur emoji
- Un fichier
-
Feature B - Nouvelles catégories : Crée une branche
feature/categorieset ajoute :- Une fonction
addAnimalEmojis()qui ajoute des emojis d'animaux - Une fonction
addFoodEmojis()qui ajoute des emojis de nourriture - Une fonction
addWeatherEmojis()qui ajoute des emojis météo
- Une fonction
-
Simule des commits réguliers sur les deux branches (au moins 3 commits par branche)
-
Fais un rebase de
feature/web-uisur master -
Merge
feature/categoriesdans master -
Résous les conflits potentiels entre les deux features
-
Utilise
git log --graph --oneline --allpour visualiser ton travail
Ajoute des fonctionnalités avancées au convertisseur :
- Synonymes : Ajoute un système de synonymes pour reconnaître plus de mots (ex: "content" → "coeur")
- Expressions : Détecte des expressions comme "je t'aime" → "💕"
- Emojis composés : Combine plusieurs emojis pour certaines phrases
- Mode aléatoire : Choisi aléatoirement parmi plusieurs emojis pour un même mot
Améliore la qualité du code :
- Tests unitaires : Crée un fichier
test/emoji-test.jsavec des tests pour chaque fonction - Validation d'entrée : Ajoute une validation pour s'assurer que les emojis sont valides
- Performance : Optimise la conversion pour de très longs textes (livres entiers)
- Documentation : Ajoute de la JSDoc à toutes les fonctions avec exemples d'usage
Transforme le script en outil en ligne de commande :
- Arguments CLI : Utilise
process.argvpour accepter du texte directement - Fichier de config : Crée un système de configuration via fichier
emoji-config.json - Mode interactif : Ajoute un mode interactif pour saisir du texte en temps réel
- Help et version : Implémente
--helpet--versionavec exemples d'usage
Configure l'automatisation :
- Scripts npm : Ajoute des scripts dans
package.jsonpour test, convert, interactive - Hooks pre-commit : Configure un hook qui vérifie la syntaxe et lance les tests
- CI/CD simulation : Crée un script
deploy.shqui simule le déploiement du convertisseur - Versioning : Utilise les tags Git pour versionner ton outil emoji