Installer Git
Fondamental :
Git est un logiciel de gestion de version. Il est open source et publié sous licence libre
Fonctions
Pourquoi la gestion de version ?
Sauvegarde incrémentale du travail
Suivi des modifications
Retour en arrière
Partage des modifications
Centralisation des sources
Collaboration contrôlée
Possibilité de maintenir plusieurs versions simultanées
Méthode : Installation
Git est disponible sur les distributions GNU/Linux, sur MacOS et sur Windows. On trouve également des applications Git pour Android.
Complément : Documentation
Complément : Vidéo pour démarrer avec Git
Application
Installez Git sur votre machine et exécutez la commande suivante :
git help
En utilisant cette commande trouver la commande qui permet de "Afficher l'état de la copie de travail".
Installez Git sur votre machine et exécutez la commande suivante :
git help
En utilisant cette commande trouver la commande qui permet de "Afficher l'état de la copie de travail".
Configurer une identité (git config)
Syntaxe :
Une fois Git installé la première chose à faire est de le configurer avec les informations qui permettront de signer les futurs commits (ce sont les opérations consistant à enregistrer des modifications dans Git).
git config --global user.name "John Doe"
git config --global user.email johndoe@example.com
git config -l
git-scm.com/book/fr/v2/Démarrage-rapide-Paramétrage-à-la-première-utilisation-de-Git
Attention :
Deux champs sont obligatoires pour Git :
le nom,
l'email.
Complément : Configuration locale vs. configuration globale
Pour la configuration de Git, on peut choisir entre l'option --local
(option par défaut) ou --global
:
--global
permet de spécifier que la configuration est vraie quelque soit le dépôt pour l'utilisateur qui fait la configuration ;--local
permet de dire que la configuration n'est valable que pour le dépôt courant.
La configuration locale est prioritaire sur la configuration globale.
Complément :
Il existe beaucoup d'options configurables dans Git, dont par exemple l'éditeur par défaut, les couleurs de sortie, les politiques de gestion...
git-scm.com/book/fr/v2/Personnalisation-de-Git-Configuration-de-Git
Complément : Ajouter une signature GPG à tous ses commits
L’identité nom/email pouvant être facilement usurpé, il est conseillé d’ajouter une signature via votre clef GPG personnelle. Il faut alors utiliser l’option -S [IDCLEF]
avec la commande git commit
.
Pour rendre automatique l’utilisation de la clef GPG dans les commandes de git, il faut mettre-à-jour sa configuration git :
git config --global commit.gpgsign true
git config --global user.signingkey IDCLEF
Application
Initialiser votre identité Git.
Vérifiez votre identité.
stc@hal9017:~$ git config -l
user.name=Stéphane Crozat
user.email=stph@crzt.fr
core.editor=nano
Créer un dépôt (git init)
Tout dossier du système de fichier peut être suivi par Git, cela signifie que l'on va pouvoir gérer ce dossier (c'est à dire les fichiers et les sous-dossiers qu'il contient) avec Git.
Fondamental :
On dit qu'on crée un dépôt Git.
Syntaxe : Le dépôt Git
Pour que Git suive un dossier il faut initialiser celui-ci.
On se positionne dans le dossier à suivre, puis on exécute :
git init
Exemple :
mkdir example
cd example
git init
À partir de maintenant, Git prend en charge la gestion de version du répertoire example.
Remarque :
Git ne suit donc pas toutes les modifications sur tout le système, mais uniquement dans les dossiers dans lequel on a fait un git init
.
Attention : Le dossier .git
Lors du git init, Git a créé un dossier .git, dans lequel il stocke tout ce dont il a besoin.
Il ne faut pas toucher à ce dossier à moins d'être absolument sûr de ce qu'on fait.
Application
Créer un dossier git/we01
sur votre ordinateur.
Initialisez un dépôt Git dans ce répertoire.
mkdir git
cd git
mkdir we01
cd we01
git init
Dépôt Git vide initialisé dans /tmp/we01/git/we01/.git/
Les trois espaces de Git : working directory, staging area, repository
Fondamental : Espaces principaux
Git s'organise en trois espaces (logiques) principaux :
Le working directory (ou répertoire de travail)
Le staging area (zone de préparation)
Le repository (ou dépôt)
Définition : Working directory
Le working directory correspond à l'état actuel du répertoire Git :
les nouveaux fichiers qui ne sont pas encore suivis,
les fichiers modifiés depuis la dernière version.
C'est ce que l'on voit dans le système de fichier à un instant t.
Définition : Staging area
La staging area est la zone intermédiaire entre le working directory et le repository.
Elle contient les modifications effectuées dans le working directory que Git va ajouter au repository lors du prochain commit.
Définition : Repository
Le repository (ou dépôt) correspond aux fichiers dans l'état de la dernière validation effectuée (commit).
Application
Vous créez un nouveau fichier dans un dossier suivi par Git, ce fichier sera présent dans :
Le working directory
La staging area
Le repository
Vous créez un nouveau fichier dans un dossier suivi par Git, ce fichier sera présent dans :
Le working directory
La staging area
Le repository
Visualiser les changements dans le working directory
Rappel : Working directory
Syntaxe :
git status
Exemple :
Application
Créez un fichier README.md à la racine d'un dépôt Git, ce fichier contient :
votre nom,
la licence de votre projet (par exemple "Licence Art Libre — https://artlibre.org").
nano README.md
Visualisez l'état de votre suivi Git avec git status
.
Suivre les fichiers (git add)
Fondamental :
La commande git add permet de déplacer un fichier depuis le working directory vers la staging area.
Méthode : git add
La commande git add
est utilisée pour :
préparer la validation d'un fichier qui a été créé récemment et qui n'est pas encore suivi ,
préparer la validation des modifications apportées à un fichier déjà suivi.
git-scm.com/book/fr/v2/Les-bases-de-Git-Enregistrer-des-modifications-dans-le-dépôt
Syntaxe :
git add myfile.txt
Méthode :
La commande git reset
permet d'annuler un git add
.
Attention :
La commande git reset
n'annule pas les modifications qui ont été faites, elle annule simplement le fait que le fichier est prêt à être validé.
Application
Soit un fichier README.md à la racine d'un dépôt Git.
Ajouter ce fichier à la staging area.
Vérifiez que le fichier a bien été ajouté à la staging area.
Soit un fichier README.md à la racine d'un dépôt Git.
Ajouter ce fichier à la staging area.
Vérifiez que le fichier a bien été ajouté à la staging area.
Versionner les fichiers (git commit)
Fondamental :
La commande git commit permet de déplacer un fichier depuis la staging area vers le repository afin d'en créer une version permanente.
Une fois dans le repository la copie du fichier est figée, elle ne peut plus être modifiée (ni facilement supprimée), elle devient une archive que l'on pourra retrouver dans le futur telle quelle.
Méthode :
Pour effectuer un commit il faut que le ou les fichiers concernés aient été préalablement placés dans la staging area. L'instruction
git commit
permet donc de valider les changements qui ont été ajoutés à la staging area.Lorsque l'on effectue un commit, on doit associer un message qui résume le contenu des modifications de l'étape de validation.
Syntaxe :
git commit
git commit -m "message"
Définition : Commit
Un commit est un point de sauvegarde du travail.
Chaque commit possède un identifiant unique ;
Un commit est associé à une unique personne ;
L'historique des commits est incrémental, out commit (excepté le premier) a un commit « père » ;
Un commit correspond à une version figée du projet ;
On peut naviguer dans les commits (et donc revenir en arrière).
Méthode :
Ma commande git restore
permet de remplacer la version actuelle d'un fichier par une version préalablement commitée.
Attention :
La version actuelle du fichier sera définitivement remplacée.
Conseil :
Dans Git on peut considérer que les fichiers qui sont dans le working directory et la staging area sont des fichiers temporaires qui peuvent facilement être altérés, et que ce qui sont dans le repository sont des fichiers protégés en écriture.
Application
Soit un fichier README.md à la racine d'un dépôt Git, ce fichier contient :
votre nom,
la licence de votre projet (par exemple "Licence Art Libre — https://artlibre.org").
Ce fichier a été ajouté à la staging area à l'aide de la commande git add README.md
.
Valider définitivement les modifications apportées à ce fichier avec le message "Adding README".
git commit -m "Adding README"
Visualisez l'état de votre suivi Git avec git status
.
Ajouter votre email au fichier README.md et vérifiez que le fichier a bien été détecté comme modifié par Git.
Validez cette nouvelle modification avec le message "Adding email to REAME".
git add README.md
git commit -m "Adding email to REAME"
Afficher l'historique des commits (git log)
Syntaxe :
Le git log
permet de voir l'historique de tous les commits effectués sur un repository.
git log
Exemple :
On peut voir ici :
L'identifiant unique des commits ;
Les auteurs ;
Les dates des commit ;
Les messages qui ont été entrés lors des commits.
Syntaxe :
Le git diff
permet de voir les modifications apportées au working directory :
depuis l'état du staging area :
git diff
depuis le dernier commit :
git diff HEAD
depuis un commit quelconque :
git diff id_commit
Exemple :
On peut observer sur cet exemple que entre le working directory et le dernier commit :
le
myfile.txt
a été modifié,la ligne
Ceci n'est pas une phrase.
a été supprimée de ce fichier,la ligne
Ceci est-il une phrase ?
a été ajoutée à ce fichier.
Méthode :
Les instruction git log
et git diff
peuvent être suivies du nom d'un fichier afin de n'afficher l'historique ou les différences qui concernent ce fichier.
Exemple :
On peut observer sur cet exemple qu'entre working directory et le commit 30676ede3ab1aaedc3cd8a6f8abc749efa552858
, à propos du fichier README.md, la ligne stephane.crozat@utc.fr
a été ajoutée.
Application
Quelle est la commande qui a permis d'obtenir les informations suivantes ?
commit 51bbf4b54c4c853c13bd23057deebb958c12e1a2 (HEAD -> master)
Author: Stéphane Crozat <stph@crzt.fr>
Date: Mon Nov 16 01:40:24 2020 +0100
Renommage des personnages et villes
commit 85cca47699b1eecc18417aad2a8ca47ddd03c766
Author: Stéphane Crozat <stph@crzt.fr>
Date: Sat Nov 14 01:04:20 2020 +0100
Recalage temporel des chapitres 11, 12, 13 et 14
commit e2e7e37abee61dc8186a6ee645951da54eb951e6
Author: Stéphane Crozat <stph@crzt.fr>
Date: Fri Nov 13 00:32:31 2020 +0100
Début du chapitre 15 (à finir)
commit 0aae619cd23c85647f1f72dade4045091b0c0a7b
Author: Stéphane Crozat <stph@crzt.fr>
Date: Thu Nov 12 02:42:21 2020 +0100
Refonte du chapitre 11 (Ajout d'Ada)
Le fichier chap11.md
a été modifié sur le disque local.
Comment afficher ce qui a été modifié dans ce fichier depuis le dernier commit ?
Quelle est la commande qui a permis d'obtenir les informations suivantes ?
commit 51bbf4b54c4c853c13bd23057deebb958c12e1a2 (HEAD -> master)
Author: Stéphane Crozat <stph@crzt.fr>
Date: Mon Nov 16 01:40:24 2020 +0100
Renommage des personnages et villes
commit 85cca47699b1eecc18417aad2a8ca47ddd03c766
Author: Stéphane Crozat <stph@crzt.fr>
Date: Sat Nov 14 01:04:20 2020 +0100
Recalage temporel des chapitres 11, 12, 13 et 14
commit e2e7e37abee61dc8186a6ee645951da54eb951e6
Author: Stéphane Crozat <stph@crzt.fr>
Date: Fri Nov 13 00:32:31 2020 +0100
Début du chapitre 15 (à finir)
commit 0aae619cd23c85647f1f72dade4045091b0c0a7b
Author: Stéphane Crozat <stph@crzt.fr>
Date: Thu Nov 12 02:42:21 2020 +0100
Refonte du chapitre 11 (Ajout d'Ada)
Le fichier chap11.md
a été modifié sur le disque local.
Comment afficher ce qui a été modifié dans ce fichier depuis le dernier commit ?
Restaurer des versions (git checkout)
Fondamental :
Le git checkout
permet de se déplacer sur un commit de l'historique.
Cette commande va restaurer l'ensemble du projet dans l'état dans lequel il était au moment de ce commit :
les fichiers créés depuis seront supprimés,
les fichiers supprimés depuis seront restaurés,
les modifications faites depuis seront annulées.
Cette fonction permet de donc de remonter dans le passé de n'importe quel état du projet.
Syntaxe :
git checkout identifiant
Remarque :
La commande git checkout master
permet de revenir à l'état du dernier commit (donc à l'état présent du présent).
Exemple :
git checkout 30676ede3ab1aaedc3cd8a6f8abc749efa552858
Cette commande va restaurer l'ensemble du projet dans l'état dans lequel il était au moment du commit 30676ede3ab1aaedc3cd8a6f8abc749efa552858
.
Attention :
Pour que cette commande soit inoffensive, il est nécessaire que le toutes les modifications courantes du projet aient été commitées.
En effet :
la commande
git checkout
utilisée pour retourner à un état antérieur, va supprimer l'état présent,la commande
git checkout
pourra ensuite être utilisée pour revenir au dernier état commité.
Mais ce qui n'a pas été commité ne pourra plus jamais être retrouvé.
Remarque :
Si la commande git checkout
est lancée sur un projet qui comporte des modifications en cours non validées, Git imposera d'annuler ces modifications ou de les commiter avant de pouvoir effectuer le checkout (afin de protéger l'utilisateur d'une perte d'information).
Complément : HEAD~1, HEAD~2...
La commande git checkout HEAD~1
permet de retourner à la dernière version validée avant celle actuelle (version actuelle "moins une"). De même git checkout HEAD~2
pour retourner deux versions en arrière, etc.
Complément : git tag
La commande git tag montag identifiant
permet d'associer un tag à une version afin de la retrouver plus facilement ensuite.
Application
Soit l'historique suivant :
commit 51bbf4b54c4c853c13bd23057deebb958c12e1a2 (HEAD -> master)
Author: Stéphane Crozat <stph@crzt.fr>
Date: Mon Nov 16 01:40:24 2020 +0100
Renommage des personnages et villes
commit 85cca47699b1eecc18417aad2a8ca47ddd03c766
Author: Stéphane Crozat <stph@crzt.fr>
Date: Sat Nov 14 01:04:20 2020 +0100
Recalage temporel des chapitres 11, 12, 13 et 14
commit e2e7e37abee61dc8186a6ee645951da54eb951e6
Author: Stéphane Crozat <stph@crzt.fr>
Date: Fri Nov 13 00:32:31 2020 +0100
Début du chapitre 15 (à finir)
commit 0aae619cd23c85647f1f72dade4045091b0c0a7b
Author: Stéphane Crozat <stph@crzt.fr>
Date: Thu Nov 12 02:42:21 2020 +0100
Refonte du chapitre 11 (Ajout d'Ada)
Écrivez la commande qui permet de revenir à l'état antérieur au renommage des personnages et des villes.
Écrivez la commande qui permet de revenir à l'état actuel du projet, après le renommage des personnages et des villes.
Soit l'historique suivant :
commit 51bbf4b54c4c853c13bd23057deebb958c12e1a2 (HEAD -> master)
Author: Stéphane Crozat <stph@crzt.fr>
Date: Mon Nov 16 01:40:24 2020 +0100
Renommage des personnages et villes
commit 85cca47699b1eecc18417aad2a8ca47ddd03c766
Author: Stéphane Crozat <stph@crzt.fr>
Date: Sat Nov 14 01:04:20 2020 +0100
Recalage temporel des chapitres 11, 12, 13 et 14
commit e2e7e37abee61dc8186a6ee645951da54eb951e6
Author: Stéphane Crozat <stph@crzt.fr>
Date: Fri Nov 13 00:32:31 2020 +0100
Début du chapitre 15 (à finir)
commit 0aae619cd23c85647f1f72dade4045091b0c0a7b
Author: Stéphane Crozat <stph@crzt.fr>
Date: Thu Nov 12 02:42:21 2020 +0100
Refonte du chapitre 11 (Ajout d'Ada)
Écrivez la commande qui permet de revenir à l'état antérieur au renommage des personnages et des villes.
Écrivez la commande qui permet de revenir à l'état actuel du projet, après le renommage des personnages et des villes.
Mettre du code de côté
Git stash
On a vu précédemment que Git est constitué de 3 espaces :
Le Working Directory
Le Staging Area
Le Local Repository
En réalité, il en existe un autre moins important : la Stash.
Syntaxe : Git Stash
La commande git stash [push]
permet de mettre de côté des modifications du Working Directory, puis revenir à l’état du dernier commit (HEAD
). Cela est utile, par exemple, avant de se déplacer dans l’arborescence des modifications avec git checkout
.
Pour rétablir ces modifications, il suffit d’utiliser la commande git stash pop
.
Pour visualiser à tout moment le contenu de la Stash, on utilise la commande git stash show
.
Remarque :
Il est possible d’enchaîner plusieurs git stash
pour sauvegarder différents états «sales» ; git stash pop
restaurera toujours le dernier état sauvegardé : C’est le principe d’une pile.