Ajoute Git TP 2 - Branches

This commit is contained in:
Alexis Fourmaux 2025-10-14 19:11:05 +02:00
parent 91450ba15c
commit 5e1b9f9ce8

View file

@ -4,143 +4,95 @@
### Ce que vous allez faire
- Faire évoluer votre projet "Générateur de mots de passe"
- Vous allez cloner une version complète du projet générateur de mots de passe pour y ajouter une contribution
### Ce que vous allez apprendre
- Manipuler les branches
- Travailler avec un dépôt distant
- Faire une Merge Request
- Gérer des conflits de fusion
## Étapes
### 1 Installation
### 0 Préparation
**Objectif :** Installer git
**Objectif :** Créer un compte Gitlab
```admonish travail
1. Aller sur le site officiel de git et télécharger linstallateur : [Download for Windows](https://git-scm.com/downloads/win)
1. Lancer linstallateur pour installer git
1. Choisir VSCode comme éditeur par défaut
1. Choisir l'option pour nommer les branches principales `main`
1. Choisir loption `Only-ever fast-forward` comme comportement par défaut pour le `git pull`
1. Garder les options par défaut pour le reste
1. Rendez-vous sur [Gitlab](https://gitlab.com) et créez un nouveau compte (ou connectez-vous si vous en avez un).
1. Donnez votre nom d'utilisateur et/ou mail à votre professeur pour qu'il vous ajoute au projet
1. Une fois ajouté, rendez-vous sur : [pwd-generator](https://gitlab.com/afourmaux-edu-ufa-b2/pwd-generator)
1. Trouvez l'URL pour cloner avec HTTPS
1. Ouvrez un nouveau répertoire dans Visual Studio Code, puis un terminal
1. Tapez la commande `git clone <url> .` en remplaçant l'url par celle trouvée plus haut. Git devrait vous demander vos identifiants.
```
```admonish note title="Dans le compte rendu"
1. Résumer en 2 ou 3 phrases ce que fait git, grâce à la [documentation](https://git-scm.com/book/en/v2/Getting-Started-About-Version-Control).
1. Expliquer ce quest un système de gestion des versions.
- Rien à écrire
```
### 2 Créer un nouveau dépôt
### 1 Manipulation de branches
**Objectif :** Créer un dépôt git
**Objectif :** Créer une branche de fonctionnalité
```admonish travail
1. Créer un dossier vide dans votre espace personnel
1. Ouvrir ce dossier avec VSCode
1. Ouvrir le terminal dans VSCode et taper la commande `git init`
1. Ouvrir le dossier dans lexplorateur Windows et afficher les fichiers cachés pour voir le dossier caché créé par git (ou utiliser la commande `dir -force` dans le terminal)
1. Aidez-vous de la [documentation](https://git-scm.com/docs/git-branch) pour
- Lister ***toutes*** les branches existantes
- Créer une branche nommée `votre_prenom_tp_branches`
- Basculer sur la branche `votre_prenom_tp_branches`
2. Ajoutez un nouveau fichier à votre nom dans le dépôt.
3. Faites un commit (n'oubliez pas d'ajouter votre modification) pour valider votre changement
4. Tentez de faire `git push`. À l'aide du résultat de la commande, corrigez votre commande pour pousser votre branche sur le dépôt distant.
```
```admonish note title="Dans le compte rendu"
1. Expliquer ce que fait la commande `git init`, grâce à la [documentation](https://git-scm.com/docs/git-init)
1. Indiquer le nom du dossier caché créé par git
1. Expliquer ce quest un dépôt git
1. Quelles branches existent ?
1. Expliquez les commandes utilisées
1. Que sont les branches dont le nom commence par `remotes/origin` ?
1. Quelle est la différence entre `remotes/origin/develop` et `develop` ?
```
### 3 Faire un premier commit
### 2 Merge request
**Objectif :** Créer un commit
**Objectif :** Créer une merge request
```admonish travail
1. Configurer git avec votre email et votre nom pour signer le travail :
- Taper `git config --global user.email "votre email"`
- Taper `git config --global user.name "Votre nom"`
1. Copier le fichier `main.py` fourni dans votre dossier de travail
1. Taper `git status` pour voir que git a détecté le nouveau fichier comme non suivi ("Untracked file")
1. Utiliser `git add` pour demander à git de suivre ce fichier. Vérifier le résultat avec `git status` (le fichier doit apparaître en vert)
1. Taper `git commit` pour enregistrer vos changements
- Écrire un commentaire court sur la première ligne (exemple : `Ajoute le programme principal`)
- Enregistrer et fermer léditeur quand cest terminé
1. Allez sur la page web du projet et trouvez la liste des branches. Vérifiez que votre branche y soit.
1. Trouvez le menu des requêtes de fusion, et créez une requête de fusion pour merger votre branche (source) dans `develop` (cible)
1. Dans le menu de création, assignez-vous la requête, et assignez la relecture à un.e de vos camarades. Attendez son commentaire et son approbation (lire la suite).
1. Lorsque que quelqu'un vous aura assigné une relecture, allez voir sa merge request et déposez un commentaire.
1. Attendez une réponse, résolvez le commentaire et approuvez sa Merge Request (MR)
1. Lorsqu'on aura approuvé votre MR, mergez-la.
1. Sur votre poste, basculez sur `develop` et utilisez `git pull` pour récupérer les mises à jour. Vérifiez que votre commit a été mergé.
```
```admonish note title="Dans le compte rendu"
1. Expliquer ce que font les commandes suivantes en quelques lignes, grâce à la [documentation](https://git-scm.com/docs) :
- `git add`
- `git status`
- `git commit`
1. Expliquer ce que représente un "commit"
1. Expliquez ce qu'est une merge request (ou pull request sur Github)
2. Expliquez l'interêt des merge request dans le cadre d'un gros projet
```
### 4 Ajouter des modifications
### 3 Gestion de conflits
**Objectif :** Enregistrer une modification avec git
**Objectif :** Apprendre à gérer des conflits de fusion
```admonish travail
1. Taper la commande `git log` pour voir lhistorique
1. Copier le code du bloc `À copier` en dessous et l'ajouter dans la fonction `afficher_menu` de `main.py`
1. Enregistrer, puis taper `git status` pour voir le changement
1. Taper `git diff` pour observer la différence
1. Utiliser la commande `git add -u` après avoir lu la [documentation](https://git-scm.com/docs/git-add#Documentation/git-add.txt--u) sur loption -u
1. Vérifier le résultat avec les commandes `git status`, `git diff`, `git log`
1. Faire un commit avec `git commit`, écrire un message pour reconnaître ce nouveau commit, puis re-vérifier létat avec les commandes déjà utilisées
1. Créez une nouvelle branche et basculez dessus.
2. Ajoutez votre prénom dans la section `Contributrices et contributeurs` du `README.md`
3. Faites un commit (n'oubliez pas d'ajouter votre modification) pour valider votre changement
4. Tentez de faire `git push`. À l'aide du résultat de la commande, corrigez votre commande pour pousser votre branche sur le dépôt distant.
5. Créez une MR. Attendez (dans le calme et la discipline) qu'un camarade en soit au même point.
6. Mergez votre branche ou celle de votre camarade, puis tentez de merger l'autre. Travaillez à deux pour cette partie.
7. Comme tout le monde va modifier le même fichier, il risque d'y avoir des conflits de fusion. Si cela se produit, il faudra les résoudre. Pour ça :
- Récupérez les changements dans votre espace de travail (`git pull`)
- La commande échouera probablement. Vous devrez alors effectuer `git pull --rebase`
- Vous aurez peut-être à gérer le conflit de fusion localement. N'hésitez pas à demander de l'aide.
- Communiquez entre vous pour définir un ordre de fusion et résoudre les conflits.
```
```admonish abstract title="À copier"
~~~python
print("Quel type de mot de passe souhaitez-vous créer ?")
print("1 - Mot de passe avec configuration par défaut")
print("2 - Mot de passe avec configuration personnalisée")
print("3 - Phrase de passe avec configuration par défaut")
print("4 - Phrase de passe avec configuration personnalisée")
print("0 - Quitter\n")
~~~
```admonish warning title="Important"
Cette partie peut être chaotique : tout le monde travaille sur le même fichier et tente de merger en même temps ou presque. C'est voulu, et cela montre l'intérêt de s'organiser lors du travail en projet pour :
- architecturer correctement le code afin de segmenter les problèmes
- bien se répartir les tâches pour ne pas travailler tous en même temps sur les mêmes portions de code
- savoir s'organiser lorsque cela est inévitable
```
```admonish note title="Dans le compte rendu"
1. Quel message de commit avez-vous mis ?
1. Quand vous tapez `git log`, quelles informations saffichent ? Dans quel ordre ?
1. Expliquer ce que fait la commande `git diff`
1. Lister les étapes pour enregistrer une modification dans git. Expliquer pourquoi ces étapes sont séparées
```
### 5 Manipuler lhistorique
**Objectif :** Annuler ou restaurer des modifications
```admonish travail
1. Taper la commande `git diff HEAD^1` pour comparer les changements
1. Modifier votre fichier `main.py`, enregistrer, taper `git status` et tenter dannuler la modification (indice: la commande à taper est donnée par `git status`)
1. Regarder la sortie de la commande `git log`
1. Taper `git reset HEAD^1` puis vérifier avec les commandes `git diff`, `git status`, `git log`
1. Faire un commit pour enregistrer la modification
```
```admonish note title="Dans le compte rendu"
1. Expliquer lutilité de la commande `git restore`
1. Expliquer ce que font `git diff HEAD^1` et `git reset HEAD^1`. Préciser la signification de `HEAD^1`
```
### 6 Etiqueter un commit
**Objectif :** Ajouter une étiquette ("tag")
```admonish travail
- Trouver le hash (identifiant) dun ancien commit avec `git log`
- Créer une étiquette `my_tag` sur ce commit (vous aider de la [documentation](https://git-scm.com/docs/git-tag))
- Vérifier que létiquette apparaît dans lhistorique avec `git log`
- Taper la commande `git switch --detach my_tag` puis vérifier la position avec le log
- Revenir à létat précédent avec `git switch -`
```
```admonish note title="Dans le compte rendu"
- Expliquer ce que fait la commande `git switch` et son utilité
- Expliquer ce quest un "tag" git et à quoi cela sert (vous aider de la [documentation](https://git-scm.com/book/en/v2/Git-Basics-Tagging))
```
## Ressources supplémentaires
- [Git book](https://git-scm.com/book/en/v2)
- [Git doc](https://git-scm.com/doc)
- [Git vidéos](https://git-scm.com/videos)