Git est gestionnaire de versions. C'est un logiciel libre et gratuit, créé en 2005 par Linus Torvalds, auteur du noyau Linux. Il fonctionne sur Windows, Mac et Linux.
Git est de loin le système de contrôle de version le plus largement utilisé aujourd'hui.
Un logiciel de gestion de versions est un programme qui permet aux développeurs de conserver un historique des modifications et des versions de tous leurs fichiers.
Les gestionnaires de versions sont donc très pratique pour :
Avec Git, l’historique complet du code n’est pas conservé uniquement sur un dépôt local sur votre machine. Chaque copie du code peut être envoyée sur un dépôt distant en ligne sur lequel est conservé l’historique des modifications.
On retrouve de nombreux sites permettant d'héberger des dépôts distants. Les plus connus sont gitlab
ou github
.
Pour accéder à un service de dépôt distant, il est nécessaire de se créer un compte. Dans notre cas, nous allons utiliser GitLab.
Pour vous créer un compte, il suffit de se rendre sur le site suivant
Pour utiliser le logiciel, il suffit de l'installer à l'aide de la commande suivante :
sudo apt-get install git
Git s'utilise en ligne de commande à l'aide d'un terminal (Linux ou Windows).
Dans un premier temps, il faut configurer votre identité. Ces actions vous permettront d'être identifiable sur GitLab.
git config --global user.name "Bob"
git config --global user.email "bob.alice@exemple.com"
L'option
--global
permet de le faire qu'une seule fois.
Pour créer un dépôt, il existe plusieurs méthodes.
Créer un dépôt local vide : on part de rien et l'on initialise de zéro.
Cloner un dépôt distant : on clone un dépôt déjà existant.
Dans un premier temps, il faut se rendre dans le répertoire dans lequel sont enregistrés vos fichiers.
Il suffit d'utiliser la commande suivante pour initialiser le dépôt local.
git init
Pas grand-chose se passe. En réalité, un nouveau fichier caché vient d'être généré.
Ce dossier caché contient tous les éléments non visibles de Git : la configuration, les logs, les branches...
Lors de projets collaboratifs, il est souvent nécessaire d'utiliser un dépôt distant afin que chacun puisse récupérer le code ou y apporter des modifications.
Pour cloner le dépôt distant sur votre machine, il va falloir récupérer l’URL du dépôt distant. Cela se passe sur GitLab.
Il suffit ensuite d'utiliser la commande suivante :
git clone https://gitlab.com/michel/mon-depot.git
Le dépôt vient d'être copié sur votre machine dans un dossier ayant le nom du dépôt.
Pour bien comprendre les différents états de notre dépôt, voici le schéma de fonctionnement.
Ce schéma représente le fonctionnement de Git. Il est composé de 3 zones qui forment le dépôt local et du dépôt distant GitHub.
Le working directory : c'est le répertoire de notre projet sur notre ordinateur.
Le stage ou index : c'est un espace intermédiaire. Il contient l'ensemble des fichiers que l'on va vouloir ajouter dans la prochaine validation / prochain commit.
Le repository : c'est la zone qui contient toutes toute les dernières validation de code.
Il reste le dépôt distant sur lequel nous viendrons déposer les versions présentes dans la zone « repository ».
Voici les commandes pour manipuler les fichiers d'une zone à une autre.
git add
: Ajouter un fichier dans l'index (ou stage).git add fichier1 fichier2 # Pour ajouter précisément des fichiers
git add . # Pour ajouter tous le dossier courant
git -m commit
: Créer une nouvelle validation / commit du projet.git commit -m 'ajouter des fichier1 et fichier2'
Le paramètre -m
comme « message », permet de définir un message particulier rattaché au commit effectué. Si vous n’utilisez pas cet argument, la commande git commit
ouvrira un éditeur de texte dans lequel vous pourrez saisir le message de commit.
git remote add origin
: ajouter l'URL d'un dépôt distantgit remote add origin https://gitlab.com/michel/mon-depot.git
Cette commande n'est pas utile si vous avez cloné le dépôt depuis GitLab.
git push origin main
: Envoyer le commit (la version) sur le dépôt distant sur la branche « main ».git push origin main
git pull
: Mettre à jour le dépôt local avec la dernière version du dépôt distantgit pull
On peut résumer toutes les commandes avec le schéma suivant.
Le tuto ci-dessous vous présente les fonctionnalités de base de Git et GitLab. Il existe encore de nombreuses fonctionnalités essentielles comme le système de branches, de tests automatisés, de déploiement continu...
Une branche est un zone de développement indépendante. Par défaut, Git commence avec une branche appelée main (ou master dans les anciennes versions).
Les branches permettent de :
git branch nouvelle-branche
: Créer une nouvelle branche de travail.git branch dev
git switch nouvelle-branche
: Changer de branches.git checkout de
git branch
: Lister les branches.git branch
git merge
: Fusionner les branches pour assembler toutes les fonctionnalités.git checkout main # On revient sur la branche principale
git merge dev
Le travail collaboratif avec Git repose sur l'utilisation des branches locales et distantées pour organiser le développement d'un projet.
git clone https://github.com/utilisateur/mon-projet.git
git checkout -b feature/ajout-fonctionnalite
git add .
git commit -m "Ajout d'une nouvelle fonctionnalité"
git push origin feature/ajout-fonctionnalite
Si un membre de l'équipe souhaite récupérer les fichiers de ta nouvelle branche, il peut utiliser avec git fetch
. Cela crée une copie locale de cette branche.
git checkout origin/feature/ajout-fonctionnalité
te mettrait en mode détaché (lecture seule).git fetch origin
git checkout -b feature/ajout-fonctionnalité origin/feature/ajout-fonctionnalité
Un fois le travail sur la nouvelle branche terminé, il est possible de la fusionner sur la branche principale.
git checkout main
git merge feature/ajout-fonctionnalité
git push origin main
Quand plusieurs développeurs modifient la même partie d’un fichier sur différentes branches, Git ne peut pas fusionner automatiquement les changements. Il signale alors un conflit (merge conflict).
Les conflits Git apparaissent généralement dans ces cas :
Lors d’un pull (git pull
) : Tu récupères les modifications distantes (git pull), mais tu as aussi modifié localement les mêmes lignes.
Lors d’un merge (git merge
) : Tu veux fusionner feature-x
dans main
, mais les deux branches ont modifié la même ligne dans un fichier.
Deux développeurs modifient le fichier index.js
sur des branches différentes :
main
:console.log("Hello, world!");
dev
:console.log("Hello sur la branche dev");
Si on essaies de fusionner la banche dev
dans main
, git
affiche une erreur :
Auto-merging index.js
CONFLICT (content): Merge conflict in index.js
Automatic merge failed; fix conflicts and then commit the result.
Le fichier index.js
contient alors une explication du conflit.
<<<<<<< HEAD
console.log("Hello, world!");
=======
console.log("Hello sur la branche dev");
>>>>>>> feature-x
Explication :
<<<<<<< HEAD
: Modification venant de la branch main
.=======
: Séparateur.>>>>>>> dev
: Modification venant de la branche dev
.Il faut alors choisir les lignes à garder, puis ajouter et valider le fichier sur Git.
git add index.js
git commit -m "Résolution du conflit dans index.js"