MD global du prof: https://github.com/O-clock-Sinbad/S05E09-exo-git-slampazona
Permet de me dire ou je suis (orientation) pwd
Afficher la liste des fichiers dans le répertoire courant (là où je suis) ls
rentrer dans un document : cd + nom du document
Revenir dans dans le dossier parent : cd + ../
Création d’un nouveau dossier : mkdir + nom dossier
Suppression d’un dossier : rmdir + nom du dossier
Création d’un nouveau fichier : touch + nom du fichier
Supprimer un fichier : rm + nom du fichier
Suppression récursive qui va supprimer le dossier + les autres dossiers et fichiers à l’intérieur : rm -r + nom du dossier
Déplacer et renommer
Déplacer un dossier dans l’autre : mv + dossier objet + dossier cible
Renommer un dossier : mv + nom du dossier objet + nouveau nom
Rentrer dans une branche : git checkout
+ nom de la branche
Afficher toutes les branches dans la console : git branch -a
Pull request = demande de merge
conflit = modification au meme endroit au meme moment
git pull = git fetch + git merge
git fetch = je récupère et je mets dans mon dépot
On va dans son dépot sur github.com, et on clique sur Pull Requests
en haut, puis sur le bouton vert New Pull Request
On choisi master
<- henriette
, puis on créé cette pull request.
On arrive sur une formulaire de texte, c'est pour indique des choses concernant la pull request, on saisit ou pas des informations. Puis on clique sur Create Pull Request
. A partir de la la pull request est réellement créee et en attente de validation.
Pour valider la pull request, on va dessus, et on clique sur le bouton vert Merge pull request
, et Confirm merge
.
Normalement la pull request passe en violet si elle est mergée.
On refait exactement la même chose mais pour la branche michel
et PAF conflit ! C'est pas grave on continue de créer la pull request, c'est juste qu'on pourra pas la valider sur le site. On va directement régler le conflit en ligne de commande.
Pour faire ça on va reproduire les mêmes conditions qu'une pull request, c'est à dire on va créer un merge entre michel
et master
Déjà on va se positionner sur master et récupérer le résultat de la merge request qui a été faite sur master via la pull request
git checkout master
git fetch # on récupère ce qu'il s'est passé sur le dépot distant et me le met sur le dépot local
git merge michel # on va provoquer le même conflit que la PR
Et là, conflit !
Fusion automatique de playlist.md
CONFLIT (contenu) : Conflit de fusion dans playlist.md
La fusion automatique a échoué ; réglez les conflits et validez le résultat.
Ici il est marqué que le fichier playlist.md
est en conflit. Il faut donc régler ce conflit. Plusieurs solutions s'offrent à nous :
- On accepte les "Current changes" à savoir on garde tel qu'il était au niveau de ce conflit avant le conflit
- On accepte les "Incoming Changes" à savoir on régle le conflit en disant les modification de la branche à merger sont celles qu'on veut.
- On mixe les 2, c'est à qu'on supprimes toutes trace de
<<<<<<<
ou de======
et de>>>>>>>
et on ne garde que ce qu'on veut, ( en adaptant suivant la situation )
Dans tous les cas, le fichier doit être correct sans tous les chevrons à la fin de la résolution du conflit. Une fois qu'on a fini de régler les conflits, le commit de merge n'a pas pu se créer de façon automatique, on va donc devoir le faire nous même.
On ajoute donc les fichiers modifiés à un commit, on commit et on push
git add playlist.md
git commit -m "Merge de michel dans master"
git push
Conflit réglé
Le multi remote c'est la possibilité d'avoir 2 remotes ou plus différents sur le même dépot local. Par exemple son propre remote avec son code propre, et celui du prof
Pouvoir récupérer le code du prof et le merger dans son propre code, et pouvoir pousser tout ça dans son propre remote repository.
On commence déjà par aller récupérer l'url ssh du dépot à ajouter, à savoir le dépot du prof
Puis on retourne dans ton dépot et on fait la commande suivante :
git remote add prof git@github.com:O-clock-Sinbad/exo-git-slampazona.git
Si on veut vérifier on tape la commande :
git remote -v
On a donc 2 remote différents, origin
avec le code étudiant, et prof
avec le code du prof.
Et chaque remote repository à ses propres branches.
Déjà on commence par mettre les repository à jour en local :
git remote update
On veut récupérer le code de la branche master
du dépot du prof
, donc de la branche prof/master
, on veut donc merge cette branche dans notre branche master
en local ( Pour rappel grace au upstream la branche master local suit la branche distante origin/master
)
On provoque un fetch pour être à jour, et un merge pour récupérer, ou alors, on fait un pull qui fait les 2 à la fois
git pull prof master
La première fois on va avoir l'erreur : fatal: refus de fusionner des historiques sans relation
, il faut donc lui dire de créer une relation sur cet historique.
git pull prof master --allow-unrelated-histories
La y'a surement conflit 3 solutions :
-
Je règle les conflits un par un ( c'est long et source d'erreur, mais très précis )
-
J'accepte que en cas de conflit c'est le code du prof qu'on doit garder dans tous les cas, ce moment là j'utilise le code suivant à la place
git pull prof master --allow-unrelated-histories -X theirs
Le -X c'est le type de résolution des conflits, theirs
c'est le code des "autres" et ours
c'est mon code. Si je met theirs
en cas de conflit, on résout le conflit en supprimant mon code en conflit et on remplace par celui du prof. Si je met ours
c'est l'inverse.
Si jamais j'ai lancer un pull et que j'avais pas prévu que j'avais un conflit, je le constate après, je peux annuler la fusion avec la commande :
git merge --abort
Puis je recommance la fusion comme je l'entend