Ce workshop a pour but de vous faire comprendre comment fonctionne les issues GitHub et l'outil Gitkraken à travers quelques exercices pratiques contenant des situations complexe qui peuvent vous arrivez lorsque vous travailler en groupe.
Dans ce workshop, nous aborderons les sujets suivants :
- Fork un repo
- Paramétrer son GitKraken
- Résoudre des conflits de branches et de commits
- Récupérer le commit d'une autre branche
- Mettre à jour une branche avec le master/main
- Gérer vos branches
- Créer, récupérer, modifier ou supprimer des stashs
- Rename un commit
A chaque fin d'exercice, une explication sera faite pour vous expliquer comment correctement effectuer les actions nécessaires pour résoudre l'exercice.
Quelques liens qui pourront vous être utiles :
Pour ce workshop, vous aurez besoin de Gitkraken
disponible via le lien si dessus. GitKraken est un logiciel avec une version gratuite et payante, la version payante est disponible gratuitement si vous êtes étudiant (Epitech) à l'aide du Student Pack Github via ce lien.
N.B: Il est préférable d'avoir la version payante qui est disponible jusqu'à la fin de vos études mais si vous n'avez pas encore le Student Pack ou si vous ne pouvez pas l'avoir vous pouvez sauter certains exercices, nous ferons l'explication directement sur Discord
Pour le premier exercice nous vous demandons d'installer GitKraken et de préparer l'environnement.
Pour cela :
- Installer GitKraken
- Fork ce répertoire Github
- Cloner le fork de ce répertoire
- Lancer GitKraken et ouvrir le dossier que vous venez de clone
Tout devrais être bon maintenant, faites attention à bien cloner votre répertoire et pas celui là, c'est obligatoire pour passer à la suite.
C'est la première étape pour bien mettre en place les objectifs et tâches de chacun lors de la réalisation d'un projet. Il peux arriver assez réguliérement dans un projet que le même fichier soit modifier sur deux branches différentes, si cela arrive, vous n'allez pas pouvoir merge la branche sur l'autre branche, cela provequera dans la plupart des cas un conflit.
- Aller dans votre repo fork du workshop sur [GitHub] dans l'onglet "Issues"
- Créer deux à trois issues (détaillez un minimum les issues, ne pas juste mettre le titre)
- Aller dans l'onglet "Projects", créer un projet et assigner les issues au projet en cours
- Créer un label "error handling", "bug" et "enhancement" et les assigner aux issues correspondantes
- Ajouter une photo dans le commentaire de l'une des issues
- Assigner une issue à au moins un membre de l'équipe
- Close au moins une des issues et la déplacer dans la barre "Done"
Pour cette exercice, vous aurez besoin de créer un conflit vous même et de résoudre ce conflit.
Pour faire ça :
- Créer une nouvelle branche
new-name
à partir du master - Modifier NAME par toto dans le printf du fichier
ex01/main.c
- Commitez et pushez votre commit
- Revenez sur la branche master (Double clique sur le label "master")
- Modifier à nouveau NAME cette fois ci par tata dans le printf du fichier
ex01/main.c
- Commitez et pushez votre commit
- Mergez la branche
new-name
sur lemaster
A partir de là, GitKraken vous indiqueras qu'il y a un conflit lors du merge, à droite, la liste des fichiers en conflict sera affichée, pour résoudre le conflit cliquez directement sur le fichier en question.
Vous devez maintenant résoudre le conflit (choisissez la version que vous voulez), une fois fait, sauvegardez votre fichier et commitez votre merge.
N.B: Lorsque vous effectuez un merge de deux branches, la branche sur laquelle vous êtes sera TOUJOURS la branche réceptrice
Il arrive parfois lorsque vous travaillez sur plusieurs branches en même temps que vous fassiez l'erreur de push votre commit sur la mauvaise branche. Pour résoudre cela, git vous offre une solution : Le cherrypick !
Chose importante à savoir, si cela vous arrive, vous ne devez surtout pas push le commit sur le remote, si c'est le cas, vous allez devoir force push pour supprimer le commit, ce qui est très déconseillé dans la plupart des cas !
Pour tester le cherrypick :
- Modifier la valeur de retour dans le fichier
ex02/main.c
- Commitez (sans push) votre modification
- Changez de branche (
new-name
) - Cherrypick le dernier commit du
main
sur la nouvelle branche - Pushez le commit
Maintenant, il va falloir nettoyer la branche main
et supprimer le commit en trop, pour commencer revenez sur la branche main
(local).
Ils existent plusieurs solutions pour supprimer un commit, nous vous laissons essayer de trouvez par vous même, le but est de ne plus avoir le dernier commit du main
.
Lorsqu'on travaille sur plusieurs branches en même temps, et que nos collaborateurs merge sur le master/main, il peut être nécessaire de récupérer leurs travaux comme des fonctions ou des fichiers spécifiques.
Dans ces cas là, il est déconseillé de récupérer les fichiers à la main car cela peut créer pleins de conflits lors du merge final de la branche.
C'est pour ça, qu'il existe une option qui s'appelle le rebase
, cette fonctionnalité permet de remettre votre branche tout en haut d'une autre branche.
L'avantage du rebase comparé au merge habituel, c'est qu'au lieu de créer un nouveau commit et d'avoir une branche perpendiculaire en plein milieu de la liste des branches, on modifie directement le commit d'origine de la branche.
Voici une très bonne vidéo qui explique visuellement la différence entre les merges et les commit : https://www.youtube.com/watch?v=xot40u-_1FI
Testons ça maintenant :
- Revenez sur votre
main
si ce n'est pas déjà fait - Créer une fonction dans le fichier
ex02/main.c
(Une fonction vide est suffisante pour cette exercice) - Commitez et pushez votre commit
- Changez de branche (
new-name
)
Maintenant essayer de rebase la branche new-name
à partir du main
, un peu de documentation ici !