@@ -12,8 +12,7 @@ Ce TP va aussi utiliser l'éditeur de code [VSCode](https://code.visualstudio.co
...
@@ -12,8 +12,7 @@ Ce TP va aussi utiliser l'éditeur de code [VSCode](https://code.visualstudio.co
Maintenant que les prérequis sont installés, il est temps de se lancer !
Maintenant que les prérequis sont installés, il est temps de se lancer !
## Partie 0 : Configuration de Git et du GitLab de ViaRézo
## Partie 0 : Configuration de Git et du Gitlab de ViaRézo
Avant de pouvoir utiliser Git, il y a quelques configuration à faire.
Avant de pouvoir utiliser Git, il y a quelques configuration à faire.
...
@@ -27,22 +26,22 @@ Pour que les modifications que tu feras sur le repository soient identifiables,
...
@@ -27,22 +26,22 @@ Pour que les modifications que tu feras sur le repository soient identifiables,
Git sait maintenant qui tu es et le nom choisi sera associé aux modifications que tu feras.
Git sait maintenant qui tu es et le nom choisi sera associé aux modifications que tu feras.
### Paramètre de connexion au serveur Gitlab
### Paramètre de connexion au serveur GitLab
Lorsque l'on utilise Git, le code est stocké sur un serveur distant, le [GitLab](https://gitlab.viarezo.fr).
Lorsque l'on utilise Git, le code est stocké sur un serveur distant, le [GitLab](https://gitlab.viarezo.fr).
Dans le cas où le projet Gitlab n'est pas public, il faudra s'authentifier pour pouvoir synchroniser les fichiers entre le serveur Gitlab et ton ordinateur. Gitlab propose deux manières de s'authentifier :
Dans le cas où le projet GitLab n'est pas public, il faudra s'authentifier pour pouvoir synchroniser les fichiers entre le serveur GitLab et ton ordinateur. GitLab propose deux manières de s'authentifier :
* L'indentification par nom d'utilisateur/mot de passe. Par défaut, Gitlab demandera un identifiant (2023nompr) et un mot de passe lorsque ce sera nécessaire, l'accès au répo par cette méthode a été bloquée sur ce GitLab (c'est pas une grande perte). De fait, on passe par la seconde méthode.
* L’identification par nom d'utilisateur/mot de passe. Par défaut, GitLab demandera un identifiant (2024nompr) et un mot de passe lorsque ce sera nécessaire, l'accès au dépôt par cette méthode a été bloquée sur ce GitLab (c'est pas une grande perte). De fait, on passe par la seconde méthode.
* Il existe alors une deuxième méthode pour s'authentifier : le protocole ssh. Les étapes pour s'identifier sont détaillées en-dessous.
* Il existe alors une deuxième méthode pour s'authentifier : le protocole SSH. Les étapes pour s'identifier sont détaillées en-dessous.
---
---
### Paramétrer l'authentification par clé ssh
### Paramétrer l'authentification par clé SSH
* Crée une clé ssh en suivant par exemple [ce tutoriel](https://inchoo.net/dev-talk/how-to-generate-ssh-keys-for-git-authorization/).
* Crée une clé SSH en suivant par exemple [ce tutoriel](https://inchoo.net/dev-talk/how-to-generate-ssh-keys-for-git-authorization/).
* Ajoute ta clé dans ton profil Gitlab en te rendant dans `Edit profile` (disponibles après avoir cliqué sur le logo en haut à droite) puis `SSH Keys`.
* Ajoute ta clé dans ton profil GitLab en te rendant dans `Edit profile` (disponibles après avoir cliqué sur le logo en haut à droite) puis `SSH Keys`.
* Tu pourras maintenant t'authentifier via SSH.
* Tu pourras maintenant t'authentifier via SSH.


---
---
...
@@ -56,17 +55,17 @@ La première étape est de créer un repo Git (c'est-à-dire un endroit pour met
...
@@ -56,17 +55,17 @@ La première étape est de créer un repo Git (c'est-à-dire un endroit pour met
### Fork du projet formation
### Fork du projet formation
---
---
**Qu'est-ce que forker un projet ?**
**Qu'est-ce que fork un projet ?**
Lorsqu'un projet disponible en open source sur un Gitlab nous intéresse, on peut en créer une copie et travailler dessus. Ça évite de recommencer un projet de zéro. Il est important de noter que le fork est plus qu'une copie d'un projet puisque le projet source et le projet forkés sont toujours liés. Mais nous n'utiliserons pas ce lien dans ce TP.
Lorsqu'un projet disponible sur un GitLab nous intéresse, on peut en créer une copie et travailler dessus. Ça évite de recommencer un projet de zéro. Il est important de noter que le fork est plus qu'une copie d'un projet puisque le projet source et le projet forkés sont toujours liés. Mais nous n'utiliserons pas ce lien dans ce TP.
---
---
C'est l'heure de créer ton premier fork. Rendez-vous sur [ce projet Gitlab](https://gitlab.viarezo.fr/ViaRezo/formation-git) pour en créer un fork :
C'est l'heure de créer ton premier fork. Rendez-vous sur [ce projet GitLab](https://gitlab.viarezo.fr/ViaRezo/formations/formation-git) pour en créer un fork :
* Sur la page d'accueil du projet, clique sur ***Fork*** en haut à droite au-dessus de la liste des fichiers.
* Sur la page d'accueil du projet, clique sur ***Fork*** en haut à droite au-dessus de la liste des fichiers.
* Il faut alors choisir un namespace (c'est à dire un endroit) où sera stocké le projet. Clique sur le bouton ***Select*** sous ton profil afin de créer un projet personnel.
* Il faut alors choisir un namespace (c'est à dire un endroit) où sera stocké le projet. Clique sur le bouton ***Select*** sous ton profil afin de créer un projet personnel.
* Après un temps de chargement, ton projet personnel apparaît. Tu peux vérifier que c'est bien le tiens en regardant dans l'url. Il devrait y avoir ton nom d'utilisateur.
* Après un temps de chargement, ton projet personnel apparaît. Tu peux vérifier que c'est bien le tien en regardant dans l'URL. Il devrait y avoir ton nom d'utilisateur.
* Comme tu viens de faire un fork, il est encore possible de faire des modifications sur ton projet et sur le projet original. Il faut donc désactiver cette option pour avoir un projet indépendant. Clique sur ***Settings*** dans la barre de gauche puis dans la sous-catégorie ***Advanced***, clique ***Remove fork relationship***. Confirme l'opération en entrant le nom du projet.
* Comme tu viens de faire un fork, il est encore possible de faire des modifications sur ton projet et sur le projet original. Il faut donc désactiver cette option pour avoir un projet indépendant. Clique sur ***Settings*** dans la barre de gauche puis dans la sous-catégorie ***General*** et ***Advanced***, clique ***Remove fork relationship***. Confirme l'opération en entrant le nom du projet.
Il ne reste plus qu'à récupérer une copie local (c'est à dire sur ton ordinateur) des fichiers.
Il ne reste plus qu'à récupérer une copie local (c'est à dire sur ton ordinateur) des fichiers.
...
@@ -81,13 +80,13 @@ Il ne reste plus qu'à récupérer une copie local (c'est à dire sur ton ordina
...
@@ -81,13 +80,13 @@ Il ne reste plus qu'à récupérer une copie local (c'est à dire sur ton ordina
---
---
**[!] Je n'y parviens pas car Git a mémorisé un mauvais mot de passe [!]**
**[!] Je n'y parviens pas car Git a mémorisé un mauvais mot de passe [!]**
Windows a mémorisé le mot de passe. Jette un oeil à [cette procédure](https://stackoverflow.com/questions/15381198/remove-credentials-from-git) pour le modifier.
Windows a mémorisé le mot de passe. Jette un œil à [cette procédure](https://stackoverflow.com/questions/15381198/remove-credentials-from-git) pour le modifier.
---
---
## Partie 2 : Versionnage et Premiers commits
## Partie 2 : Versionnage et Premiers commits
Maintenant que tu as une copie locale des fichiers, tu peux commencer à les éditer localement (avant d'envoyer tes modifications sur le serveur). Pour cela, ouvre VSCode et fait***File > Open Folder***. Sélectionne le dossier `formation-git` fraichement créé. Tu auras alors accès dans VScode à tous les fichiers du repo.
Maintenant que tu as une copie locale des fichiers, tu peux commencer à les éditer localement (avant d'envoyer tes modifications sur le serveur). Pour cela, ouvre VSCode et fais***File > Open Folder***. Sélectionne le dossier `formation-git` fraîchement créé. Tu auras alors accès dans VScode à tous les fichiers du repo.
### Mission 1 : Modifier un fichier
### Mission 1 : Modifier un fichier
...
@@ -101,7 +100,7 @@ Il existe aussi un module git intégré à VSCode, je t'encourage à essayer de
...
@@ -101,7 +100,7 @@ Il existe aussi un module git intégré à VSCode, je t'encourage à essayer de
**Cette ligne est aussi moche et inutile, supprime là !**
**Cette ligne est aussi moche et inutile, supprime là !**
Tu peux vérifier que les lignes du fichier ont bien disparu du repo distant via l'interface web de Gitlab sur ta copie personnelle.
Tu peux vérifier que les lignes du fichier ont bien disparu du repo distant via l'interface web de GitLab sur ta copie personnelle.
### Mission 2 : Ajouter un fichier
### Mission 2 : Ajouter un fichier
...
@@ -110,17 +109,17 @@ Ta deuxième mission est de créer un fichier `solutions.md` à la racine du rep
...
@@ -110,17 +109,17 @@ Ta deuxième mission est de créer un fichier `solutions.md` à la racine du rep
---
---
**Remarque**
**Remarque**
L'extension de fichier `.md` signifie *Markdown*. Ce format permet de faire un peu de mise en page simple de fichier texte dans un format qui peutêtre lu et affiché sur l'interface web de Gitlab. Tu peux aussi utiliser le raccourci **Ctrl+Shift+V** pour visualiser ce type de fichier.
L'extension de fichier `.md` signifie *Markdown*. Ce format permet de faire un peu de mise en page simple de fichier texte dans un format qui peut-être lu et affiché sur l'interface web de GitLab. Tu peux aussi utiliser le raccourci **Ctrl+Shift+V** pour visualiser ce type de fichier.
---
---
Une fois le fichier créé, n'oublie pas de créer un commit et de le synchroniser avec le serveur Gitlab !
Une fois le fichier créé, n'oublie pas de créer un commit et de le synchroniser avec le serveur GitLab !
### Mission 3 : Supprimer un fichier (facultatif)
### Mission 3 : Supprimer un fichier (facultatif)
Dernière mission pour la route, il y a dans le repo un fichier nommé `fichier_inutile`. Sauras-tu le supprimer du repo Gitlab ?
Dernière mission pour la route, il y a dans le repo un fichier nommé `fichier_inutile`. Sauras-tu le supprimer du repo GitLab ?
Tu peux vérifier que le fichier a bien disparu du repo distant via l'interface web de Gitlab.
Tu peux vérifier que le fichier a bien disparu du repo distant via l'interface web de GitLab.
Les quelques commandes que tu viens d'utiliser (`git status`, `git add`, `git commit`, `git pull`, `git push`) sont les commandes que tu utiliseras 95% du temps.
Les quelques commandes que tu viens d'utiliser (`git status`, `git add`, `git commit`, `git pull`, `git push`) sont les commandes que tu utiliseras 95% du temps.
...
@@ -141,33 +140,33 @@ Pour pouvoir travailler séparément sur des features différentes on utilise de
...
@@ -141,33 +140,33 @@ Pour pouvoir travailler séparément sur des features différentes on utilise de
---
---
**Je veux exécuter mon code mais j'ai une erreur de module**
**Je veux exécuter mon code mais j'ai une erreur de module**
Il faut installer le module emoji avec la commande `python3 -m pip install -r requirements.txt`. Cette commande va installer tous les modules python listés dans le fichier `requirements.txt`.
Il faut installer le module `emoji` avec la commande `python3 -m pip install -r requirements.txt`. Cette commande va installer tous les modules python listés dans le fichier `requirements.txt`.
---
---
* Complète le dictionnaire `wordToEmoji` avec quelques emojis supportés. Tu peux trouver la liste [ici](https://www.webfx.com/tools/emoji-cheat-sheet/).
* Complète le dictionnaire `wordToEmoji` avec quelques emojis supportés. Tu peux trouver la liste [ici](https://www.webfx.com/tools/emoji-cheat-sheet/).
* Si tu as exécuté le fichier python `code/main.py`, tu as peutêtre pu remarquer l'apparition du dossier `code/__pycache__`. Ces fichiers ne sont pas intéressants à gitter (car pas nécessaires à l'exécution du fichier `code/main.py`). Il faut donc ajouter un `gitignore` pour les ignorer : ***crée un fichier nommé***`.gitignore`***à la racine du repo*** et ajoute les dossiers et fichiers que tu veux ignorer (ici: `code.__pycache__`).
* Si tu as exécuté le fichier python `code/main.py`, tu as peut-être pu remarqué l'apparition du dossier `code/__pycache__`. Ces fichiers ne sont pas intéressants à gitter (car pas nécessaires à l'exécution du fichier `code/main.py`). Il faut donc ajouter un `gitignore` pour les ignorer : ***crée un fichier nommé***`.gitignore`***à la racine du repo*** et ajoute les dossiers et fichiers que tu veux ignorer (ici: `code/__pycache__`).
* Commit et push tes changements. Remarque que le dossier `code/__pycache__` n'a pas été synchronisé.
* Commit et push tes changements. Remarque que le dossier `code/__pycache__` n'a pas été synchronisé.
---
---
**Je n'arrive pas à push les changements**
**Je n'arrive pas à push les changements**
Comme tu as créé une branche en local, Git n'arrive pas à trouver la branche correspondante sur le serveur. Il faut donc la créer avce une option spéciale. **Git te donne la commande à copier-coller dans le message d'erreur (les erreurs avec Git sont souvent assez explicite pense bien à les lire en cas de problème).**
Comme tu as créé une branche en local, Git n'arrive pas à trouver la branche correspondante sur le serveur. Il faut donc la créer avce une option spéciale. **Git te donne la commande à copier-coller dans le message d'erreur. Les erreurs avec Git sont souvent assez explicites , pense bien à les lire en cas de problème).**
---
---
### Merge Requests
### Merge requests
Il est temps de rajouter ce changement de code dans la branche principale !
Il est temps de rajouter ce changement de code dans la branche principale !
Sur l'interface Web du Gitlab, il y a un menu déroulant sous le nombre de commits permettant de sélectionner une branche. Choisis la branche que tu viens de push. Tu peux y voir tes changements mais ils disparaissent si tu repasses sur la branche master. L'objectif est d'intégrer les changements à master. Il faut pour cela créer une **merge request**.
Sur l'interface Web du GitLab, il y a un menu déroulant sous le nombre de commits permettant de sélectionner une branche. Choisis la branche que tu viens de push. Tu peux y voir tes changements mais ils disparaissent si tu repasses sur la branche master. L'objectif est d'intégrer les changements à master. Il faut pour cela créer une **merge request**.
* À gauche, clique sur l'icone ***Merge Requests*** puis clique sur ***New merge request***.
* À gauche, clique sur l’icône ***Merge Requests*** puis clique sur ***New merge request***.
* Choisis ta branche en tant que ***Source branch*** et master en tant que ***Target branch***. Puis clique sur ***Compare branches and continue***
* Choisis ta branche en tant que ***Source branch*** et master en tant que ***Target branch***. Puis clique sur ***Compare branches and continue***
* Remplis un titre et une description. Tu peux aussi ajouter des labels personnalisés pour catégoriser facilement les merge requests.
* Remplis un titre et une description. Tu peux aussi ajouter des labels personnalisés pour catégoriser facilement les merge requests.
* Tout en bas tu trouves 2 onglets : ***Commits*** et ***Changes***. Ils te permettent de voir l'historique et les changements entre les 2 branches.
* Tout en bas tu trouves 2 onglets : ***Commits*** et ***Changes***. Ils te permettent de voir l'historique et les changements entre les 2 branches.
* Clique ***Create merge request***. La merge request a été créée. il ne reste plus qu'à cliquer sur ***Merge*** pour que les changements soient intégrés à master.
* Clique ***Create merge request***. La merge request a été créée. Il ne reste plus qu'à cliquer sur ***Merge*** pour que les changements soient intégrés à master.


...
@@ -190,7 +189,7 @@ Félicitations, tu viens de réussir ta première merge request ! Je t'invite à
...
@@ -190,7 +189,7 @@ Félicitations, tu viens de réussir ta première merge request ! Je t'invite à
Si tu retournes dans l'onglet ***Repository > Branches***, tu verras qu'une branche `branche-a-rebase` est déjà créée. Elle apporte des améliorations au code. Tu vas donc devoir créer une merge request pour cette branche.
Si tu retournes dans l'onglet ***Repository > Branches***, tu verras qu'une branche `branche-a-rebase` est déjà créée. Elle apporte des améliorations au code. Tu vas donc devoir créer une merge request pour cette branche.
Une fois la merge request créée. Tu peux voir sur le résumé de la merge request que la branche `branche-a-rebase` a des commits en retard sur master (_x commits behind target branch_). Suivant les réglages du projet, il possible de force le rebase de la branche à merge avant de pouvoir accepter la merge request. Je conseille d'activer cette option dans le projet Gitlab :
Une fois la merge request créée. Tu peux voir sur le résumé de la merge request que la branche `branche-a-rebase` a des commits en retard sur master (_x commits behind target branch_). Suivant les réglages du projet, il possible de force le rebase de la branche à merge avant de pouvoir accepter la merge request. Je conseille d'activer cette option dans le projet GitLab :
* Dans ***Settings > General > Merge requests***, choisir l'option `Merge commit with semi-linear history`.
* Dans ***Settings > General > Merge requests***, choisir l'option `Merge commit with semi-linear history`.
...
@@ -199,13 +198,14 @@ Tu peux maintenant revenir dans l'onglet ***Merge requests***.
...
@@ -199,13 +198,14 @@ Tu peux maintenant revenir dans l'onglet ***Merge requests***.
Comme il y a déjà eu des changements sur le même fichier, il faut **rebase** la branche sur master. Pas de panique, il suffit de cliquer sur le bouton ***Rebase*** sur la page de la merge request.
Comme il y a déjà eu des changements sur le même fichier, il faut **rebase** la branche sur master. Pas de panique, il suffit de cliquer sur le bouton ***Rebase*** sur la page de la merge request.
---
---
### Cherry-pick (facultatif)
### Cherry-pick (facultatif)
Si tu retournes encore une fois dans l'onglet ***Repository > Branches***, tu verras qu'il existe une branche nommée `branche-avec-truc-style`. Elle apporte des améliorations au code. Notre objectif est de ramener l'unique commit de cette branche sur la branche `branche-a-rebase`.
Si tu retournes encore une fois dans l'onglet ***Repository > Branches***, tu verras qu'il existe une branche nommée `branche-avec-truc-style`. Elle apporte des améliorations au code. Notre objectif est de ramener l'unique commit de cette branche sur la branche `branche-a-rebase`.
On va donc utiliser `git cherry-pick <nom du commit>`, depuis la branche `branche-a-rebase`.
On va donc utiliser `git cherry-pick <nom du commit>`, depuis la branche `branche-a-rebase`.
Tu auras besoin du commit SHA, pour ce faire, sur le projet Gitlab, va dans ***Repository > Commits***, puis choisis la branche `branche-avec-truc-style`, il apparaitra à droite, tu peux directement le copier avec le bouton juxtaposé.
Tu auras besoin du commit SHA, pour ce faire, sur le projet GitLab, va dans ***Repository > Commits***, puis choisis la branche `branche-avec-truc-style`, il apparaitra à droite, tu peux directement le copier avec le bouton juxtaposé.
---
---
Une fois le rebase (et le cherry-pick) effectué(s), tu peux review le code et merge. Encore, une fois, n'oublie pas de regarder le graphe pour bien visualiser les opérations que tu viens de faire.
Une fois le rebase (et le cherry-pick) effectué(s), tu peux review le code et merge. Encore, une fois, n'oublie pas de regarder le graphe pour bien visualiser les opérations que tu viens de faire.