Your browser doesn't support the features required by impress.js, so you are presented with a simplified version of this presentation.

For the best experience please use the latest Chrome, Safari or Firefox browser.

Introduction

Système de gestion de version

  • Les développeurs peuvent travailler simultanément (même sur des fichiers communs) sans qu'ils voient leurs modifications écrasées.
  • Il est possible de travailler simultanément sur des versions différentes du code.
  • Il est possible de revenir à des versions antérieures du code à tout moment
  • Il est possible de savoir qui a effectué telle ou telle modification, quand, où est pourquoi.

Système centralisé vs Système décentralisé

Installation

  • Si vous n'en n'avez pas déjà un, créer un compte sur Github en choisissant un nom d'utilisateur me permettant de vous identifier (ex pdupont pour Pierre Dupont)

Configuration

  • git config --global user.name "Votre nom"
  • git config --global user.email "Votre email"
  • git config --global color.ui auto

Les Repository

  • Créer un nouveau repository ou dépôt local dans le répertoire courant
  • git init nom_du_repository
  • Télécharger un repository existant
  • git clone url_du_repository
 Cloner le repository ipi-git-github ainsi que celui situé à l'adresse https://github.com/votreuser/ipi-git-github.git

Effectuer des changements

  • 1 - Faire des changements
  • 2 - Préparer les changements pour le versioning
  • 3 - Enregistrer les changements dans votre repository
  • 4 - Envoyer ces changements sur le repository central
  • 5 - Faire des changements
  • 6 - Voir les modifications qui n'ont pas été enregistrées dans le repository
  • 7 - Voir les différences avec le repository
  • Je crée le fichier portant mon nomvilloud.txt
  • git add villoud.txt
  • git commit -m "Création du fichier villoud.txt"
  • git push
  • J'ajoute mon nom et mon prénom dans le fichier villoud.txt
  • git status
  • git diff villoud.txt
 Effectuer ce processus dans le repository ipi-git-local et ipi-git-github et constater à chaque étape le contenu des repository locaux et distants (le cas échéant).

Travailler à plusieurs

  • 1 - Faire des changements
  • 2 - Préparer les changements pour le versioning
  • 3 - Enregistrer les changements dans votre repository
  • 4 - Envoyer ces changements sur le repository central
  • 5 - Récupérer les changements effectués depuis ma dernière mise à jour
  • 6 - Envoyer ces changements sur le repository central
  • Je crée le fichier portant mon nomdupond.txt
  • git add dupond.txt
  • git commit -m "Création du fichier dupond.txt"
  • git push
  • git pull
  • git push

Travailler à plusieurs (2)

  • 1 - Faire des changements sur le même fichier
  • 2 - Préparer les changements pour le versioning
  • 3 - Enregistrer les changements dans votre repository
  • 4 - Envoyer ces changements sur le repository central
  • 5 - Récupérer les changements effectués depuis ma dernière mise à jour
  • 6 - Envoyer ces changements sur le repository central
  • Je modifie listeNoms.txt pour ajouter mon prénom à la suite de mon nom
  • git add listeNoms.txt
  • git commit -m "Modification du fichier listeNoms.txt"
  • git push
  • git pull
  • git push

Les conflits

Gestion des conflits

Fichier noms.txt
DURAND
<<<<<<< HEAD
VILLOUD
=======
FAURE
>>>>>>> 97ef45b...
  •  
  • Contenu sans conflit
  • Où pointe votre copie locale
  • Votre modification
  • Séparateur
  • Modification distante
  • hash du commit distant en cause

Pour résoudre le conflit :

  • Modifier le fichier manuellement en faisant attention à bien garder les modifications distantes et les vôtres
  • Ne pas oublier de supprimer les éléments ajoutés par Git (<<<<<< HEAD...)
  • git add noms.txt
  • git commit
  • git push

Gestion des conflits (2)

Les branches

Manipuler les branches

  • Voir toutes les branches
  • Créer une nouvelle branche
  • Switcher votre copie de travail sur la branche
  • Fusionner le contenu d'une branche dans l'actuelle
  • Supprimer une branche
  • Pousser une branche locale sur le dépôt distant
  • git branch
  • git branch nom-branche
  • git checkout nom-branche
  • git merge nom-branche
  • git branch -d nom-branche
  • git push --set-upstream origin mabranche

Manipuler les branches (2)

  • Créer la branche fix-votrenom
  • Vérifier sur quelle branche vous êtes
  • Vous positionner sur cette nouvelle branche
  • Supprimer le fichier votrenom.txt et commiter la modification
  • Entre temps une modification a été faite sur main.
  • Incorporer les modifications de main sur fix-votrenom
  • Répercuter les modifications de fix-votrenom sur main
  • Supprimer la branche fix-votrenom
  • Pousser main
  • git branch fix-villoud
  • git branch
  • git checkout fix-villoud
  • git commit -am "Suppression du fichier villoud.txt"
  • git checkout main git pull
  • git checkout fix-villoud git merge main
  • git checkout main git merge fix-villoud
  • git branch -d fix-villoud
  • git push

Revenir en arrière

  • Consulter une autre version du code
  • Mettre de côté les modifs non commitées pour les appliquer plus tard
  • Annuler tous les commits suivants (garde les modifications localement)
  • Supprime tous les commits suivants (donc toutes les modifications)
  • Supprimer/Déplacer un fichier
  • Supprimer un fichier uniquement de git
  • Inverser un commit
  • git checkout [hash-commit|nom-branche|nom-tag]
  • git stash => git stash pop
  • git reset [hash-commit]
  • git reset --hard [hash-commit]
  • git rm fichier / git mv fichier fichier2
  • git rm --cached fichier
  • git revert mon-commit

Revenir en arrière (2)

  • Je fais des modifications que je souhaite finalement annuler
  • Je souhaite enlever les modifications en cours (que je garde en mémoire)
  • Je change de branche et fais des modifications que je commit
  • Je veux supprimer mon dernier commit
  • Je reviens sur ma branche et applique les modifications gardées en mémoire
  • Je veux annuler mon précédent commit qui a été pourtant été poussé
  • Je veux consulter l'état du repository au premier commit
  • Je reviens au dernier commit d'une branche
  • git reset --hard
  • git stash
  • git checkout fix-villoud git commit -am "mes modifications"
  • git reset HEAD^
  • git checkout main git stash pop ...
  • git revert [hash-commit] ...
  • git checkout [hash-commit]
  • git checkout main
 Il est toujours possible de revenir en arrière sur des modifications, même commitées, sans trop de problème. Mais il faut être très attentif lorsqu'on modifie des commits déjà poussés sur le repository distant (et donc potentiellement récupérés par d'autres collaborateurs)

Bonus

  • Voir l'historique des commits
  • Voir l'historique des commits de manière graphique
  • Marquer une version/Voir les versions
  • Prendre un commit dans une autre branche et l’appliquer
  • git log
  • git log --graph
  • git tag -a nom-tag / git tag -l
  • git cherry-pick mon-commit

La notion de fork

  • Je fork le projet ipi-git-200-fork
  • Je clone le projet votreuser/ipi-git-200-fork en local
  • Je fais des modifications que je commit et push
  • Je lie mon repository local avec pjvilloud/ipi-git-200-fork
  • Je fusionne la branche main de repository de référence qui contient une nouvelle modification, dans ma branche main
  • Je pousse les modifications sur mon repository
  • Je soumets mes modifications pour qu'elles puissent être fusionnées sur la branche main de pjvilloud/ipi-git-200-fork
  • Aller sur pjvilloud/ipi-git-200-fork et cliquer sur le bouton
  • git clone https://github.com/votreuser/ipi-git-200-fork
  • git commit -am "mes modifications" git push
  • git remote add upstream https:.../pjvilloud/ipi-git-200-fork
  • git fetch upstream
    git merge upstream/main
  • git push
  • Création d'une Pull Request (ou Merge Request sur Gitlab) de votreuser/ipi-git-200-fork:main vers pjvilloud/ipi-git-200-fork:main. Validation
 Lorsqu'on travaille sur un fork, on ne peut normalement pas pousser nos modifications directement sur le repository de référence, cela doit passer par une Pull Request (ce qui implique généralement une revue de code) qui est validée par une personne habilitée (propriétaire du repository de référence, ou lead developer de l'équipe par exemple).

Quelques conseils

  • Approfondir Git !!
  • Commiter tôt et souvent
  • Choisir un workflow et s'y tenir
  • Rédigez des messages de commits pertinents
  • Attention à ne pas commiter vos fichiers persos .gitignore
  • Et surtout pas de panique...

Pour aller plus loin