Bien débuter avec Git : installation et prise en main !
Sommaire
I. Présentation
Dans ce tutoriel, nous allons apprendre à utiliser Git, un logiciel open source de gestion de versions qui est très populaire chez les personnes amenées à manipuler du code : les développeurs, les personnes DevOps, mais également les personnes adeptes de scripting (comme moi).
Sans un outil adapté, la gestion des versions pour un projet de développement ou même un script, cela peut vite devenir compliqué sur la durée... D'autant plus si l'on travaille à plusieurs sur ce projet. Par exemple, cela oblige à créer soi-même des copies de ses fichiers afin de pouvoir revenir en arrière si cela ne se passe pas bien. Git apporte une réponse à cette problématique, car il va assurer un suivi sur tous les fichiers de votre projet afin de permettre une gestion des versions. Git est ce que l'on appelle un système de contrôle de version décentralisé (DVCS - Distributed Version Control System).
Git s'utilise aussi bien sur Linux, Windows que macOS et pour le stockage des données des différents projets, il y a plusieurs manières de voir les choses. Tout d'abord, on peut utiliser Git en local, c'est-à-dire que l'on installe l'outil sur sa machine et on stocke le code en local pour gérer les versions de son projet. Ensuite, on peut utiliser Git au travers des services en ligne comme GitHub ou GitLab.
GitHub est idéal pour les projets publics tandis que pour des projets privés, privilégiez plutôt GitLab et Bitbucket. Il est également possible de créer son propre serveur Git sur une machine Linux, ou sur un NAS comme sur Synology où il y a un paquet "Git Server". Pour les utilisateurs du Cloud Azure de Microsoft, sachez qu'Azure DevOps intègre une fonctionnalité nommée "Azure Repos" qui sert à gérer des dépôts Git privés.
Au sein de cette introduction à Git, je vais manipuler à partir d'une machine Windows mais le fonctionnement est le même sur Linux ou macOS. A vous de choisir la plateforme que vous préférez.
II. Git : le vocabulaire à connaître !
Quand on commence à s'intéresser à Git, il y a certains termes à connaître pour bien comprendre le fonctionnement de Git, mais aussi être capable de bien interpréter la documentation, d'orienter ses recherches sur le Web, et être capable d'utiliser les bons termes au bon moment quand on en parle avec ses collègues. Avant de rentrer dans la phase de mise en pratique, je souhaitais vous lister quelques termes que vous devez connaître absolument pour travailler avec Git.
- Repository
En français, un repository est un dépôt et il correspond à un espace de stockage sur lequel vous allez venir stocker les fichiers de votre projet. Autrement dit, c'est un dossier connecté à Git, car Git va surveiller ce dossier notamment pour identifier les changements, l'historique, etc. Un dépôt peut être local ou distant (GitHub, GitLab, etc.).
- Master / Main
Lorsque l'on travaille sur un projet, il y a toujours (en principe) une branche principale nommée "Master" c'est-à-dire "maître" (cette branche peut aussi s'appeler main) : il s’agit de la branche principale du projet qui correspond toujours à la dernière version d'une application (ou d'un script, etc.). Néanmoins, il est possible d'utiliser un autre nom !
- Branch
L'une des forces de Git, c'est de permettre la création et la gestion de plusieurs branches qui vont venir s'ajouter à la branche "Master" évoquée précédemment. Ainsi, on peut créer une nouvelle branche correspondante à un nouvel axe de développement pour travailler sur une nouvelle fonctionnalité, la correction d'un bug, etc... Cela va permettre de bénéficier de plusieurs versions des fichiers.
Pour manipuler le dépôt et les branches avec Git, on a différentes actions à notre disposition, dont :
- Merge
Merge, ou fusionner en français est l'action que l'on utilise pour fusionner une branche annexe (par exemple, une branche utilisée pour développer une nouvelle fonctionnalité) avec la branche principale "Master" pour intégrer les modifications à la version principale via une action de fusion.
- Commit
Quand on travaille sur un ou plusieurs fichiers associés à un dépôt Git, il faut synchroniser les modifications vers le dépôt afin qu'elles soient publiées en quelque sorte. L'action "commit" permet de valider les modifications avant de les envoyer au serveur où se situe le dépôt. C'est une action de contrôle.
- Push
À la suite d'un commit, on effectue une action de type "push" pour envoyer les fichiers modifiés sur le serveur.
- Pull
À l'inverse, on peut télécharger des fichiers à partir du dépôt distant sur notre machine en local pour travailler dessus. On parle d'une action "pull" qui se traduit par "tirer" en français, car on tire les fichiers du dépôt vers l'hôte local.
- Clone
Quand on copie un projet situé sur un dépôt distant en local pour la première fois, on parle d'un clone du projet. Si l'on effectue des mises à jour par la suite, pour récupérer les derniers fichiers modifiés, on effectuera une action "pull". Cette action est aussi un moyen de télécharger une copie locale d'un projet complet pour lancer l'installation de l'application (par exemple un projet hébergé sur GitHub).
III. Installation de Git sous Windows
Git est officiellement pris en charge sur Windows et les binaires sont disponible sur le site officiel, à l'adresse suivante : git-scm.com/download/win. Je vous invite à télécharger l'installeur complet plutôt que la version portable, en 64 bits si votre machine le permet.
L'installation prend un peu de temps si l'on s'intéresse aux différentes options. Ces choix sont modifiables ultérieurement, et vous pouvez vous contenter de laisser les valeurs par défaut. Par exemple, Git offre la possibilité de définir un éditeur de code par défaut lorsque vous ouvrez un fichier de votre projet via Git.
Quand on installe Git, il est livré avec Git Bash c'est-à-dire une console permettant d'utiliser Git. Néanmoins, on peut aussi l'utiliser au travers des autres consoles, notamment PowerShell et d'outils tiers, ce qui est recommandé. De ce fait, il faut bien ajuster la variable d'environnement PATH en choisissant "Git from the command line and also from 3rd-party software".
La commande "git pull" sert à pousser le contenu local vers le dépôt distant. Plusieurs comportements sont possibles, notamment l'utilisation du mode "rebase", mais pour commencer utilisez le mode par défaut. À mon sens, c'est important d'y aller progressivement dans l'apprentissage de Git.
Veillez à ce que l'option "Enable file system caching" soit cochée pour bénéficier du cache et avoir de meilleures performances.
Patientez un instant pendant l'installation, le plus dur est fait concernant l'installation ! 🙂
L'installation est terminée, passons à l'utilisation de Git ! Que les choses sérieuses commencent !
IV. Premiers pas avec Git
A. Configurer votre profil utilisateur
Pour commencer, avant même de créer un nouveau projet, nous allons définir deux options dans la configuration de Git : le nom d'utilisateur et l'adresse e-mail. Ainsi, les différentes actions, notamment les "commit" sur les fichiers seront associés à cet utilisateur, ce qui est important pour le suivi même si pour le moment vous travaillez seul sur ce projet.
git config --global user.name "Florian Burnel" git config --global user.email "[email protected]"
Une fois que c'est fait, vous pouvez afficher la configuration actuelle avec la commande ci-dessous pour valider que c'est bien pris en compte.
git config --global --list
B. Initialiser un nouveau projet Git
Désormais, nous devons indiquer à Git où se situe notre projet sur notre espace de stockage local (ici, nous travaillons sur un projet local). Il peut s'agit d'un répertoire existant qui contient déjà les fichiers de votre projet, ou d'un nouveau répertoire créé pour l'occasion. Pour ma part, je crée un projet nommé "demo-git" dans le dossier "C:\Git" de mon ordinateur.
Vous pouvez le faire via l'interface graphique de votre système, sinon à partir de la ligne de commande. En PowerShell, cela donne :
cd "C:\Git" New-Item -ItemType Directory -Name "demo-git"
Une fois que ce répertoire est créé, je me positionne à l'intérieur. C'est important de vous positionner à la racine de votre projet pour l'initialiser. Pour initialiser ce nouveau projet et le connecter à Git, il faut exécuter la seconde commande ci-dessous.
cd "C:\Git\demo-git\" git init
Un message indique que le répertoire est bien initialisé, ce qui donne lieu à un nouveau dossier nommé ".git" (masqué) à la racine de notre projet. C'est un répertoire caché qui contient différents fichiers permettant à Git de stocker des informations sur les branches, les modifications de fichiers, etc...
Initialized empty Git repository in C:/Git/demo-git/.git/
Suite à l'initialisation de ce dossier, on peut voir que l'on est actuellement sur la branche "master", générée automatiquement. On peut voir également qu'il n'y a pas encore eu de commit via la phrase "No commits yet". Désormais, il va falloir ajouter des données à notre projet, mais peut-être que vous en avez déjà.
git status
C. Ajouter un fichier à notre projet Git
Ce nouveau projet nommé "demo-git", je vais l'alimenter avec un script nommé "Windows-Install-FSRM.ps1" que je déplace à la racine du projet (vous pouvez aussi faire des sous-dossiers). À partir de là, si l'on relance la commande "git status", on voit qu'il y a un message "Untracked files". Ce message signifie que Git a bien repéré notre fichier mais qu'il n'est pas encore suivi, c'est-à-dire que Git ne suivra pas les modifications sur ce fichier, etc.
git status
La commande "git add" sert à ajouter le fichier dans Git, simplement en précisant son nom. Pour mon script, cela donne :
git add Windows-Install-FSRM.ps1
Vous allez me dire si j'ai 300 fichiers à ajouter, je n'ai pas très envie de devoir ajouter chaque fichier un par un. Pour ajouter l'ensemble des fichiers présents dans le dossier de notre projet, on utilise cette syntaxe :
git add .
Dans le même esprit, vous pouvez ajouter tous les fichiers avec l'extension ".ps1" par exemple :
git add *.ps1
Toujours avec la commande "git status", on peut constater que le nouveau fichier est bien ajouté.
git status
D. Effectuer l'action de commit
Le fichier de notre projet étant ajouté à Git, il est temps de réaliser un premier commit. En fait, en déclenchant un commit on va effectuer en quelque sorte un snapshot de notre code à instant t. Ainsi, si l'on effectue des modifications mais que finalement on souhaite revenir en arrière, il sera possible de restaurer le fichier dans l'état qu'il était au moment du commit (snapshot).
Avec l'option "-m", on peut ajouter un commentaire qui sera associé à ce commit. C'est très important pour apporter des précisions et être capable de s'y retrouver dans tous les commits.
git commit -m "Version initiale"
À ce moment-là, la commande "git status" retourne :
On branch master nothing to commit, working tree clean
Nous venons d'enregistrer la première version de ce script PowerShell. Sachez que vous ne pouvez pas envoyer des commits en boucle sans effectuer de modifications à votre projet. Git détecte les changements au sein du répertoire de votre projet, et pour effectuer un commit, il faut qu'il y ait eu un changement à minima.
E. Voir l'historique des commits
Pour visualiser un historique des commits, avec notamment le nom de l'auteur, la date et l'heure, et le commentaire, on peut utiliser cette commande :
git log
Le terme "commit" est suivi par un identifiant propre à ce commit, c'est une information utile lorsque l'on souhaite manipuler les données de différentes commits. La commande ci-dessous sert à visualiser les logs de façon plus synthétique, pour une branche spécifique, ici "master".
git log --oneline master
F. Basculer d'une branche à une autre
Pour le moment, nous travaillons sur une branche unique nommée "master". Imaginons que l'on souhaite travailler sur de nouvelles fonctionnalités à inclure à notre script, et que l'on ait besoin de rentrer en phase de développement, tout en gardant de côté la branche principale. Dans ce cas, on peut créer une nouvelle branche nommée "dev" (ou avec un autre nom) qui sera utilisée pour développer les nouvelles fonctionnalités.
Pour créer une nouvelle branche "dev", on peut utiliser cette commande :
git branch dev
Ou, directement la commande ci-dessous qui va créer la branche et basculer dessus, tandis que la commande précédente crée seulement la branche.
git switch -c dev
Pour basculer d'une branche à une autre, c'est simple il suffit d'utiliser "git switch" et de spécifier le nom de la branche.
git switch <nom de la branche> git switch master
La commande "git switch" est une commande qui remplace "git checkout" même si cette dernière fonctionne toujours. Si vous souhaitez obtenir la liste de vos branches, utilisez cette commande :
git branch
La branche actuelle est mise en évidence, comme c'est le cas ici avec la branche "master".
Le sujet des branches est vaste et mérite un article dédié, mais sachez qu'il est possible de supprimer une branche (git branch -d <nom de la branche>), de fusionner des branches (git merge <nom de la branche>), etc.
G. Restaurer un fichier
Dans le cas où l'on travaille sur notre fichier "Windows-Install-FSRM.ps1" mais que l'on a cassé une partie du code et que l'on souhaite revenir en arrière, à l'état tel qu'était le fichier lors du dernier commit, il suffit d'utiliser la commande "git restore" de cette façon :
git restore Windows-Install-FSRM.ps1
Cette commande va restaurer le fichier immédiatement, sans même que l'on ait besoin de confirmer. A utiliser avec prudence, donc.
V. Conclusion
Cet article d'introduction à Git touche à sa fin ! D'autres articles sur Git seront mis en ligne prochainement, notamment les interactions avec GitLab et GitHub, car dans cet exemple nous avons travaillé uniquement en local. C'est déjà bien pour un début. Pour apprendre de nouvelles commandes Git, je vous recommande de regarder le site "Git Explorer" qui est une sorte de cheatsheet interactive ! Je vous encourage également à consulter la documentation officielle de Git, car elle est complète.
Normalement cela fait quelques version que la branche par défaut ne se nomme plus « master » mais « main ».
Sinon, dommage de ne pas indiquer comment installer Git sur GNU/Linux et Mac, le reste étant plutôt complet et identique pour tous les OS.
C’est toujours un plaisir d’apprendre sur Git, la commande « git switch -c + nom de la branche » m’a beaucoup surpris. Créer la branche puis basculer dessus en même temps. Mon ami Florian un pro extraordinaire.
Ralph le Geek depuis Haiti
Salut Florian, pourrais tu nous faire, comme tu sais si bien le faire, un tuto sur l’utilisation de Git et Azur Dev Ops ? Et proposer à la limite un Git UI que tu utiliserais ? (Type Git Kraken mais en free).