Git Basics

Auteurs : Geoffrey Gourlez, Sailly Olivier, Boussu Rémi

navigation dans la présentation

↓ ou espace : slide suivante
↑ : slide précédente
→ : chapître suivant
← : chapître précédent
Echap : navigation parmi tous les slides
1. Définition
2. Les Outils
3. Les commandes de base
4. Comment revenir en arrière ?
5. Merger deux branches
6. Bonnes pratiques
7. Azure DevOps
8. Pour aller plus loin

Définition

Git, GitHub, Git Flow
Quelle différence ?
Git gestionnaire de version

Github communauté, service d'hébergement et suivi de projet

Git Flow méthodologie
Vision Globale
Git vs Svn
En complément voici une courte vidéo d'OpenClassrooms
sur le sujet
Fonctionnement décentralisé et revue des changements asynchrone
En local
Mini-glossaire, environnement de travail local

Working Directory
Le répertoire dans lequel vous travaillez
Index
Une zone de transit énumérant les changements à sauvegarder
Commit
Un enregistrement énumérant les changements sauvegardés, contient un identifiant unique (SHA) et un message définissant ce changement
Head
Un pointeur ciblant par défaut le dernier commit effectué

Les Outils

Ne pas tout traquer
Le fichier .gitignore

Une ligne représente un motif à ignorer
gitignore.io
Générateur de .gitignore
Ne pas réinventer la roue
Cet outil permet une recherche par mots clefs pour générer un fichier « .gitignore » de base en fonction de vos besoins

Documentation Officielle
Pour tout savoir sur la norme établie pour l'écriture de vos « .gitignore », rendez vous sur https://git-scm.com/docs/gitignore
La ligne de commande
Maitrisez vos actions
Meilleure Maitrise
Utiliser les outils graphiques de votre IDE, c'est bien. Savoir ce qu'il se passe en arrière plan, c'est mieux !
Plusieurs Outils existent
Windows embarque par défaut l'invite de commandes « CMD », mais il en existe d'autres, telles que « Git Bash » (installée en même temps que git) ou encore « Cmder » l'une des plus complètes, que nous recommandons

Les commandes de base

Créer un repository
En quelques commandes

Créer un repository local
git init

Lier votre repo local à votre repo distant (hébergé où vous le souhaitez)
git remote add origin https://mon-url-de-repo/
Récupérer des modifications distantes
en quelques commandes

Récupérer un repository distant existant
git clone https://mon-url-de-repo/

Mettre à jour l'image locale du repo distant
git fetch

Mettre à jour l'image locale du repo distant et mon Working Directory
git pull
Prendre en compte une modification
en quelques commandes

Afficher les changements (pris en compte ou non dans l'index)
git status

Ajouter une modification dans l'index
git add fichier

Enregistrer le contenu de l'index
git commit -m "mon message"

Envoyer les commits locaux sur le repository distant
git push origin nom-branche-distante
La gestion de branche
en quelques commandes

Afficher les branches disponibles
git branch

Créer une branche et se déplacer dedans
git switch -c ma-branche

Se déplacer de branche en branche
git switch un-nom-de-branche

Créer la branche sur le repo distant et la lier à la branche locale
git push -u origin ma-nouvelle-branche

Exercice 1

Veuillez exécuter l'exercice 1

Correction en vidéo

Historique

Afficher l'historique
en quelques commandes

Afficher les commits effectués de façon claire
git log --oneline --decorate --graph

Exercice 2

Veuillez exécuter l'exercice 2

Correction en vidéo

Revenir en arrière

Annuler une modification ou modifier le dernier commit
en quelques commandes

Restaurer un fichier au commit précédent (HEAD)
La commande « git checkout » est maintenant dépréciée
git restore mon-fichier

Ajouter les fichiers de l'Index dans mon dernier commit
git commit --amend --no-edit

Puis, si mon dernier commit a déjà été poussé
git push -f origin ma-branche

Exercice 3

Veuillez exécuter l'exercice 3

Correction en vidéo

Restaurer l'index

Tout annuler ou restaurer l'index
en quelques commandes

Annuler toutes les modifications
(les fichiers seront restaurés à leur état précédent)
git reset --hard HEAD

Supprimer les fichiers de l'Index
git reset
git reset --mixed

Exercice 4

Veuillez exécuter l'exercice 4

Correction en vidéo

Merger deux branches

Merge No Fast Forward
Dans ce cas, le merge laisse une trace via un commit de merge. L'historique n'est pas perdu, mais n'apparait pas sur la branche master.
Merge Fast Forward
Dans ce cas, le merge ne laisse pas de trace. L'historique apparait sur la branche master, à la suite des commits déjà existants.
Merge Squash
Dans ce cas, le merge laisse une trace via un commit unique. L'historique est perdu et n'apparait pas sur la branche master.
Merger
en quelques commandes

Merger en Fast Forward - C'est l'option par défaut
git merge nom-branche-à-merger
ou
git merge --ff branche

Merger en No Fast Forward
git merge --no-ff branche

Merger en Squash
git merge --squash branche

Exercice 5

Veuillez exécuter l'exercice 5

Correction en vidéo

En cas de conflits

Comment faire
En cas de conflits

git merge master

Rappel: pour afficher les fichiers impactés, il est possible d'utiliser "git status"

Les fichiers non impactés par le conflit sont dans l'index, ceux impactés n'y sont pas
Les fichiers en conflit contiennent les deux versions
Pour résoudre le conflit
Il faut fusionner le contenu à la main

La fusion est clôturée par un
git add fichier-fusionné
git commit

Exercice 6

Veuillez exécuter l'exercice 6

Correction en vidéo

Bonnes pratiques

Commit
Normes de nommage

Pour faciliter la compréhension du contenu, mais aussi la génération d'un changelog

Il existe une norme pour nommer ses commits :
type(scope): message de commit
Norme angular
Git Flow
Modèle d'organisation des branches
Pour faciliter la compréhension du contenu de chaque branche, chacune est identifiée par un préfixe ou nom unique

Cette norme découle de l'outil créé par Vincent DRIESSEN qui permet de faire cela automatiquement.
Voici une courte vidéo d'OpenClassrooms
sur le sujet
L'initialisation d'un projet est fait via
git flow init
Utilisation simple
Git Flow
Utilisation avancée
Git Flow
Git au quotidien
Les interdits

- Bypasser une Pull Request
- Merger dans une branche de référence (master/develop)
- Pousser sur une branche de référence
Git au quotidien
Les incontournables

- Travailler sur sa branche
Permet de limiter les conflits

- Bien nommer ses commits
Permet d'avoir un historique clair

- N'avoir qu'une seule release par version
Permet de gérer les sources avec simplicité