Maîtrisez les Commandes Git Essentielles
Git est l'outil de gestion de versions de code le plus populaire et largement utilisé dans le développement des infrastructures informatiques. Le but de cette documentation est de vous donner les bases pour vous débrouiller dans votre travail de tous les jours.
L'histoire de Git
Git est un système de contrôle de version distribué open source. Il est disponible sur presque tous les systèmes d'exploitation.
En 2005, Linus Torvalds a créé git en tant que système de contrôle de version distribué alors parce qu'il ne pouvait plus utiliser BitKeeper gratuitement.
Désormais, git est le système le plus utilisé par les développeurs. Sa nature distribuée facilite le développement, le suivi et la bonne collaboration avec les modifications de code.
Git dans le domaine du DevOps ?
Un consultant DevOps devra développer du code et de ce fait le stocker. Il se doit donc maîtriser Git pour stocker ses codes sources :
- de l'infrastructure pour le provisionnement et la gestion de configuration
- des pipelines CI/CD
- des programmes qu'il aura en charge d'écrire
Les Concepts Clés de Git
Dans cette section, nous allons aborder tous les concepts et mots clés qui vous aideront à progresser.
Système de contrôle de version distribué
Chaque développeur possède une copie complète de l'historique du projet, ce qui permet de travailler localement.
Dépôts (Repositories)
Les dépôts, souvent appelés "repos" en abrégé, est essentiellement une base de données qui stocke toutes les versions de votre projet, ainsi que l'historique complet des modifications. Il existe deux types principaux de dépôts Git.
Dépôt distant
Un dépôt distant est une copie du projet qui est hébergée sur un serveur distant. Les dépôts distants facilitent la collaboration entre plusieurs développeurs. Le dépôt distant peut être accessible en lecture et en écriture par plusieurs personnes, ce qui permet de partager le code, de travailler ensemble et de synchroniser les modifications. Des services tels que GitHub, GitLab et Bitbucket offrent des options d'hébergement de dépôts Git.
Dépôt local
Un dépôt local est une copie de votre projet stockée sur votre propre machine. Chaque développeur travaillant sur le projet aura son propre dépôt local. Cela permet à chacun de travailler indépendamment, d'effectuer des modifications, d'enregistrer des commits et d'explorer l'historique sans avoir besoin d'une connexion Internet.
Historique enregistré
Git enregistre l'historique complet des modifications apportées au code source, ce qui permet de suivre chaque modification, quel que soit le moment où elle a été effectuée.
Collaboration
Git facilite la collaboration entre plusieurs développeurs. Plusieurs personnes peuvent travailler sur le même projet simultanément en utilisant des branches distinctes.
Branches
Les branches est un concept central de Git. Elles permettent de travailler sur des fonctionnalités ou des correctifs de manière isolée sans affecter la branche principale (généralement appelée "master" ou "main").
Commit
Les commits sont la pierre angulaire de Git et sont utilisés pour enregistrer l'historique des modifications d'un projet. Un commit est un instantané (snapshot) de l'état d'un projet à un moment donné. Plus précisément, un commit représente une série de modifications apportées aux fichiers d'un projet à un moment précis, accompagnée d'un message descriptif qui les explique.
Grâce aux commits, il est possible de revenir en arrière et de restaurer le projet à un état antérieur en sélectionnant un commit précédent. Cela permet de résoudre les problèmes, de revenir à une version stable ou de réappliquer des modifications précédemment supprimées.
Les différentes URL git
Dans Git, il existe principalement deux types d'URLs utilisés pour accéder et interagir avec des dépôts distants : les URLs HTTPS et les URLs SSH. Chacun a ses propres caractéristiques et exigences en matière de configuration et d'utilisation.
URLs HTTPS
-
Format : Les URLs HTTPS ressemblent à des URLs web classiques et commencent par
https://
. Par exemple :https://github.com/username/repository.git
-
Utilisation : Les URLs HTTPS sont utilisées pour cloner, pousser et tirer des modifications depuis des dépôts distants via le protocole HTTPS. Elles sont souvent préférées dans les configurations où la simplicité est privilégiée.
-
Authentification : L'authentification avec les URLs HTTPS se fait généralement via un nom d'utilisateur et un mot de passe. Cependant, de nombreux services comme GitHub exigent désormais l'utilisation de jetons d'accès personnel (Personal Access Tokens) au lieu de mots de passe pour une sécurité accrue.
-
Avantages :
- Facilité d'utilisation et configuration minimale.
- Pas besoin de gérer des clés SSH.
- Plus adapté aux environnements où les connexions SSH sont bloquées.
-
Inconvénients :
- La nécessité de saisir des identifiants de manière répétée, sauf si un gestionnaire de mots de passe ou des jetons d'accès sont utilisés.
- Moins sécurisé que SSH pour les opérations de transfert de données.
URLs SSH
-
Format : Les URLs SSH sont formatées différemment et commencent par
ssh://
ou simplement par un identifiant d'utilisateur suivi d'un@
et de l'adresse du serveur. Par exemple :git@github.com:username/repository.git
-
Utilisation : Les URLs SSH sont utilisées pour des opérations similaires aux URLs HTTPS (clone, push, pull), mais via le protocole SSH.
-
Authentification : L'authentification SSH repose sur un échange de clés. Vous devez générer une paire de clés SSH (publique et privée) sur votre machine et enregistrer la clé publique sur le serveur Git distant (comme GitHub ou GitLab).
-
Avantages :
- Plus sécurisé, car l'authentification est basée sur des clés et non sur des mots de passe.
- Pas besoin d'entrer des identifiants à chaque opération une fois la clé SSH configurée.
- Préférable pour des opérations automatisées, comme les scripts ou les intégrations continues.
-
Inconvénients :
- Nécessite une configuration initiale de la clé SSH.
- Peut être bloqué par certains pare-feux ou réseaux d'entreprise.
Installation de Git
Pour commencer à utiliser Git, vous devez d'abord l'installer sur votre système. Heureusement, Git est compatible avec différentes plates-formes, notamment Windows, macOS et Linux. Voici comment vous pouvez l'installer :
Installation de Git sous Windows
Je vous conseille de télécharger le package d'installation pour Windows à partir du site officiel de Git (<https://git-scm.com/download/win\>) et de suivre les instructions d'installation.
Installation de Git sous macOS
Sur macOS, Git est habituellement préinstallé. Vous pouvez vérifier s'il est déjà
installé en ouvrant le Terminal
puis en exécutant la commande git --version.
Si ce n'est pas le cas, vous pouvez installer Git via un gestionnaire de paquets
tel que Homebrew.
Installation de Git Sous Linux
Sur la plupart des distributions Linux, vous pouvez installer Git à l'aide du gestionnaire de paquets.
Par exemple, sur un poste Ubuntu :
sudo -i
add-apt-repository ppa:git-core/ppa
apt update
apt install git
Les principales commandes git
Configuration de Git
La configuration de git pour l'utilisateur se trouve dans le dossier
~/.gitconfig
ou ~/.config/git/config
. Pour éviter de véroler ce fichier de
config, on fait appel à la commande git config
. Par exemple pour définir la
branche par défaut :
git config --global init.defaultBranch main
Pour retrouver les valeurs des configs actuelles :
git config --list
file:/home/bob/.gitconfig user.name=Stéphane ROBERT
file:/home/bob/.gitconfig user.email=stephane.robert.28@gmail.com
file:/home/bob/.gitconfig core.editor=code --wait
file:/home/bob/.gitconfig init.defaultbranch=main
file:.git/config core.repositoryformatversion=0
file:.git/config core.filemode=true
file:.git/config core.bare=false
file:.git/config core.logallrefupdates=true
Plus d'infos ici
Première configuration après installation
Une fois Git
installé, vous devez le configurer. Les premiers paramètres à
définir sont votre nom d'utilisateur et votre adresse e-mail, car ces
informations seront associées à chaque commit que vous ferez. Vous pouvez
configurer Git en utilisant les commandes suivantes dans le terminal :
git config --global user.name "Votre Nom"
git config --global user.email "votre@email.com"
Téléchargement d'un projet git
La commande permettant de télécharger localement un projet avec la commande git
clone
:
git clone [OPTION] [dossier]
Si vous renseignez un dossier, la commande n'utilise pas le nom du projet pour le nom du dossier, mais celui indiqué.
Les principales options de la commande git clone
:
--recurse-submodules
: Télécharge également tous les sous-modules. Un concept que nous verrons dans une autre documentation.
Exemple :
git clone https://github.com/git/git.git /tmp/git
git clone https://github.com/git/git.git /tmp/git
Clonage dans '/tmp/git'...
remote: Enumerating objects: 356178, done.
remote: Counting objects: 100% (458/458), done.
remote: Compressing objects: 100% (218/218), done.
Réception d'objets: 23% (81921/356178), 37.52 Mio | 4.29 Mio/s
...
Résolution des deltas: 100% (267808/267808), fait.
Initialisation d'un projet git
Nous verrons dans cette section comment initialiser votre premier projet Git
localement. Pour cela, on fait appel à la commande git init
:
git init [OPTION] [dossier]
- Si vous renseignez un dossier, la commande est exécutée à l’intérieur de celui-ci. Si ce dossier n’existe pas, il sera créé.
- Si vous ne renseignez pas de dossier alors la commande est exécutée dans le répertoire actuel.
Les principales options de la commande git init
:
--initial-branch=name
:
Exemple :
git init --initial-branch=main /tmp/toto
Dépôt Git vide initialisé dans /tmp/toto/.git/
Comme vous le remarquez la commande git init
créé un dossier .git
dans
lequel on trouve :
drwxrwxr-x 7 bob bob 4096 nov. 2 13:58 .
drwxrwxr-x 3 bob bob 4096 nov. 2 13:58 ..
drwxrwxr-x 2 bob bob 4096 nov. 2 13:58 branches
-rw-rw-r-- 1 bob bob 92 nov. 2 13:58 config
-rw-rw-r-- 1 bob bob 73 nov. 2 13:58 description
-rw-rw-r-- 1 bob bob 21 nov. 2 13:58 HEAD
drwxrwxr-x 2 bob bob 4096 nov. 2 13:58 hooks
drwxrwxr-x 2 bob bob 4096 nov. 2 13:58 info
drwxrwxr-x 4 bob bob 4096 nov. 2 13:58 objects
drwxrwxr-x 4 bob bob 4096 nov. 2 13:58 refs
- la configuration du fonctionnement du projet dans le fichier
config
. - des dossiers qui permettent de gérer tout l'historique du projet. Plus d'infos ici
- ...
Gestion des branches dans git
La gestion des branches est fondamental de Git, offrant une flexibilité immense pour le développement parallèle et la collaboration. En DevOps, savoir manipuler les branches efficacement est important pour maintenir un flux de travail continu et organisé.
Création d'une Nouvelle Branche
Pour créer une nouvelle branche, la commande git branch <nom_de_la_branche>
est utilisée. Cette opération est rapide car Git crée simplement un nouveau
pointeur vers le commit actuel. Par exemple, git branch feature-nouvelle
crée
une branche nommée feature-nouvelle
.
git branch feature-nouvelle
Basculer entre les Branches
Une fois la branche créée, il faut y basculer pour y apporter des modifications.
La commande git checkout <nom_de_la_branche>
permet de changer de branche.
Ainsi, git checkout feature-nouvelle
vous positionne sur la branche
feature-nouvelle
.
git checkout feature-nouvelle
Basculement sur la branche 'feature-nouvelle'
Lister les Branches
Pour lister les branches dans un dépôt Git, vous pouvez utiliser la commande
git branch
. Cette commande offre différentes options pour afficher les
branches selon vos besoins. Voici quelques exemples courants :
-
Lister les branches locales : Pour voir toutes les branches locales dans votre dépôt, utilisez simplement :
git branch * dev feature-nouvelle main
Cette commande affichera la liste des branches locales, en mettant en évidence la branche sur laquelle vous vous trouvez actuellement.
-
Lister toutes les branches, y compris les branches distantes : Si vous souhaitez voir à la fois les branches locales et les branches distantes (c'est-à-dire celles sur le serveur), utilisez :
git branch -a * dev feature-nouvelle main remotes/origin/HEAD -> origin/main remotes/origin/dev remotes/origin/main
Les branches distantes seront listées sous un préfixe
remotes/
. -
Lister uniquement les branches distantes : Pour ne voir que les branches qui existent sur le serveur distant (par exemple, sur GitHub ou GitLab), vous pouvez utiliser :
git branch -r origin/HEAD -> origin/main origin/dev origin/main
-
Afficher les branches avec les derniers commits : Pour obtenir une vue plus détaillée, y compris le dernier commit sur chaque branche, utilisez l'option
-v
:git branch -v * dev 2790a91 correction feature-nouvelle 2790a91 correction main 4e05890 add README
-
Rechercher des branches par un motif : Si vous cherchez des branches avec un nom spécifique ou suivant un motif, vous pouvez utiliser :
git branch --list "*de*" * dev
Supprimer une Branche
Pour supprimer une branche dans Git, vous pouvez utiliser la commande git branch
avec différentes options, en fonction de si vous souhaitez supprimer une
branche localement ou sur un dépôt distant. Voici comment procéder :
Supprimer une Branche Locale
Pour supprimer une branche locale, la commande est la suivante :
git branch -d <nom_de_la_branche>
-d
est l'option pour "delete" (supprimer).- Remplacez
<nom_de_la_branche>
par le nom de la branche que vous voulez supprimer.
Par exemple, pour supprimer une branche nommée feature-obsolete
:
git branch -d feature-obsolete
Si Git détecte que les modifications dans la branche n'ont pas été
fusionnées dans la branche actuelle et pourraient être perdues, il empêchera la
suppression. Dans ce cas, vous pouvez forcer la suppression avec l'option -D
(majuscule) :
git branch -D <nom_de_la_branche>