GIT en 10 minutes

Logo Git

Ce mini tutoriel sur GIT, le fameux logiciel de versioning, n'a pas pour vocation de traiter des tenants et aboutissants de ce programme mais d'aider le débutant à mettre le pied à l'étrier et l'initier au maniement des principaux outils et à son vocabulaire pour commencer à l'utiliser en toute confiance.

Installation et configuration

On ne s'attarde pas sur le sujet, on installe Git et on vérifie que tout se soit bien passé.

# apt install git
...
$ git --version
git version 2.25.1

N'allons pas dans les méandres d'une configuration aux petits oignons et allons droit au but.

$ git config --global user.name "manu"
$ git config --global user.email "manu@email.com"

L'option --global demande à Git d'utiliser le fichier de configuration de l'utilisateur ~/.gitconfig.

Premier dépôt Git

Pour notre exemple nous allons créer un répertoire que nous appellerons gitest contenant un fichier appelé intro.txt. Ensuite en console rendons nous dans ce répertoire.

$ cd /home/manu/gitest
$ ls 
intro.txt

C'est d'ici que nous allons initialiser le dépôt gitest comme ceci:

$ git init
Dépôt Git vide initialisé dans /home/manu/gitest/.git/

Désormais Git va enregistrer toutes les modification apportées à notre projet dans le dossier caché .git.

Enfin demandons à Git l'état de notre projet avec la commande status

$ git status
Sur la branche master

Aucun commit

Fichiers non suivis:
  (utilisez "git add <fichier>..." pour inclure dans ce qui sera validé)
    intro.txt

aucune modification ajoutée à la validation mais des fichiers non suivis sont présents (utilisez "git add" pour les suivre)

Déplacer / Supprimer un dépôt

Toutes les données utilisées par Git sont stockées dans le dossier caché .git, il suffit simplement de le supprimer pour supprimer le dépôt. De même pour déplacer l'ensemble de votre projet avec son dépôt déplacez simplement le répertoire de votre projet et tout ce qu'il contient, répertoire .git inclus.

Prendre une photo (commit)

Notre fichier intro.txt est vide, ajoutons lui un peu de contenu:

Je compte bien écrire un livre dont voici l'introduction!

Comme suggéré plus haut par la commande status ajoutons notre fichier dans la mémoire de Git.

$ git add intro.txt
$ git status
Sur la branche master

Aucun commit

Modifications qui seront validées :
  (utilisez "git rm --cached <fichier>..." pour désindexer)
    nouveau fichier : intro.txt

À ce stade nous n'avons pas encore pris de photo de notre projet, nous avons simplement dit à Git que le fichier intro.txt doit être indexé pour être inclut lors du prochain commit.

Pour enregistrer les modifications apportées à notre document il faut désormais faire un commit, la fameuse photo.

$ git commit -m "Introduction étape1"
[master (commit racine) 266ce41] Introduction étape1
 1 file changed, 1 insertion(+)
 create mode 100644 intro.txt

$ git status
Sur la branche master
rien à valider, la copie de travail est propre

git add et git commit sont les deux commandes qu'il faudra toujours appeler dans cet ordre pour faire un cliché de votre projet.
L'option m est facultative mais fortement recommandé, elle ajoute un message lié au commit.

Si maintenant je continue de travailler sur mon fichier ...

Je compte bien écrire un livre dont voici l'introduction!

Il était une fois trois petits cochons...

Et je re commit

$ git add *
$ git commit -m "Introduction partie2"
[master 9b2e607] Introduction partie2
 1 file changed, 2 insertions(+)

Git nous indique que des modifications dans un fichier ont bien été prises en compte.
La dernière ligne détaille tout les changements, nombre de fichier modifié, lignes ajoutées ou supprimées, ...

Notez que j'ai remplacé le nom du fichier par un astérisque (*) qui permet d'ajouter tous les fichiers présents dans notre répertoire.

Historique des commits (log)

Afficher l'historique des commits

La commande log affichera quelque chose comme ça:

$ git log
commit 9b2e6072ae31bd68a8b17a4aaf0c3843bc21540d (HEAD -> master)
Author: manu <manu@email.com>
Date:   Tue Jul 27 11:09:02 2021 +0200

    Introduction partie2

commit 266ce410ee5828809efc118f193203904bdfffc0
Author: manu <manu@email.com>
Date:   Tue Jul 27 11:01:32 2021 +0200

    Introduction étape1

On retrouve alors l'historique de tous nos commits avec la date, l'heure, l'auteur du commit et surtout le message que nous avons écrit qui s'avère être un précieux renseignement sur l'objet du travail accompli avant le commit.

On constate également que chaque commit dispose d'une clé hexadécimal dont nous allons voir l'utilité tout de suite.

Charger un état depuis une clé:

$ git checkout 266ce410ee5828809efc118f193203904bdfffc0
Note : basculement sur '266ce410ee5828809efc118f193203904bdfffc0'.
...
HEAD est maintenant sur 266ce41 Introduction étape1

Je vous épargne ici les lignes de texte qui s'affichent sur la console mais prenez une minute pour les lire. Désormais si vous reprenez votre fichier intro.txt vous constatez qu'il est dans l'état initial du premier commit.

Je compte bien écrire un livre dont voici l'introduction!

Ne nous attardons pas plus longtemps et sans faire de modifications dans le fichier revenons à la dernière version "commitée".

git checkout master
La position précédente de HEAD était sur 266ce41 Introduction étape1
Basculement sur la branche 'master'
Je compte bien écrire un livre dont voici l'introduction!

Il était une fois trois petits cochons...

Si malgré mes contre indications vous avez modifier le fichier, alors sans le savoir vous avez commencé une nouvelle branche, vous ne pourrez pas revenir sur la branche master et vous aurez un message d'erreur de ce type:

error: Vos modifications locales aux fichiers suivants seraient écrasées par l'extraction :
    intro.txt
Veuillez valider ou remiser vos modifications avant de basculer de branche.
Abandon

Pas de panique, il va falloir forcer le retour sur la branche master grâce à l'option f.

$ git checkout master -f

Par contre les modifications que vous avez faites sont perdu! Du coup il me parait opportun de commencer à vous parler du concept de branche.

L'arbre, le tronc et les branches

On peut aisément se représenter une "branche Git" à celle des arbres, du moins au début. L'arbre à un tronc d'où partent des branches. Pour nous le tronc est la branche master.

$ git branch
* master

Ici nous avons demandé à afficher les branches de notre projet. Il n'y en a q'une puisque nous n'en avons pas créé d'autre.

quand vous ne savez plus où vous êtes utilisez git branche sans argument.
L'astérisque indique votre position

Ajouter une nouvelle branche

$ git branch paragraphe1
$ git branch
* master
  paragraphe1

La nouvelle branche à bien été ajoutée mais nous somme toujours sur la branche master comme le montre l’astérisque.

Sauter de branche en branche

Pour se déplacer sur la nouvelle branche il suffit d'un checkout avec en paramètre le nom que nous lui avons donné.

$ git checkout paragraphe1
Basculement sur la branche 'paragraphe1'
$ git branch
  master
* paragraphe1

Tant que je suis sur cette branche tous les commits que je ferais seront visibles que sur cette dernière.

ATTENTION: si vous revenez sur la branche master sans avoir commité les modifications, ces dernières seront visibles sur la branche master. Pensez à revenir sur la branche enfant pour commiter avant de basculer sur la branche master.

Faisons avancer notre projet:

Je compte bien écrire un livre dont voici l'introduction!

Il était une fois trois petits cochons...

Paragraphe 1:
Le premier des trois cochons ...

Commitons les modifications:

$ git add *
manu@zoo:~/gitest$ git commit -m "début du paragraphe 1"
[paragraphe1 beff0e4] début du paragraphe 1
 1 file changed, 2 insertions(+)

Fusionner/rapatrier sur la branche "master" avec "merge"

Si vous êtes satisfait de vos modification il est possible de fusionner la branche "paragraphe1" avec la branche "master".

La manœuvre nécessite d'être positionné sur la branche "master"

$ git checkout master
Basculement sur la branche 'master'
$ git merge paragraphe1 
Mise à jour 9b2e607..beff0e4
Fast-forward
 intro.txt | 2 ++
 1 file changed, 2 insertions(+)

Supprimer une branche

Si vous avez fusionné une branche cette dernière devient caduque, il est donc recommandé de la supprimer et ainsi éviter une accumulation inutile d'information. On supprime une branche avec l'option -d comme delete.

$ git branch -d paragraphe1
Branche paragraphe1 supprimée (précédemment beff0e4).

Conclusion

Il y aurait bien plus à dire sur Git j'en ai bien conscience et si je peux me permettre je vous donnerais juste deux petits conseils si vous êtes débutant. Quand vous vous demandez comment le programme va réagir dans tel ou tel situation: testez et testez encore et enfin lisez le livre du site officiel, c'est en français!

30-Dec-2021
^