Git¶
Git est le logiciel de gestion de versions décentralisé le plus utilisé pour le développement informatique. Il permet de synchroniser les contenus d’une (ou plusieurs) machine locale et d’un dépôt distant.

On peut en avoir une utilisation plus ou moins avancée :
un seul développeur : l’utilisation standard permet d’enregistrer les différentes versions d’un projet et de les synchroniser avec un dépôt distant (Git ESIEE, GitHub, BitBucket, …) ;
plusieurs développeurs : maintient une version centralisée du projet et permet à plusieurs personnes de contribuer au développement, chacun ayant une version à jour du code sur sa machine locale.
Installation¶
Windows 10¶
Git n’est pas installé par défaut. Il doit être installé depuis cette page.

Il est ensuite disponible dans un terminal Git Bash que l’on trouve dans le menu Démarrer:
$ git --version
git version 2.38.1.windows.1
La version peut varier.
Linux et MacOS¶
Git est installé par défaut et accessible directement dans le terminal standard
$ git --version
git version 2.38.0
La version peut varier.
Créer un répertoire local¶
On crée un répertoire local destiné à héberger les fichiers du projet
$ mkdir myproject
Pour créer un contenu minimal, éditer un fichier README.md
avec uniquement le titre du projet.
Créer un repo distant¶
Pour synchroniser son travail entre la machine locale et le repo distant, il faut disposer d’un compte sur une plateforme. Pour les élèves de l’ESIEE, un compte est déjà créé sur https://git.esiee.fr.

Il faut ensuite créer le repo distant proprement dit :
New project
Create blank project
Project name : myproject
Visibility level : Public
DON’T Initialize repository with a README
puis exécuter les instructions :
de la section « Git global setup » ;
et de la section « Push an existing folder » en utilisant le répertoire local créé à l’étape précédente.
Avertissement
Sur une autre plateforme, GitHub par exemple, la procédure est similaire même si les termes peuvent varier.
Maintenant on dispose d’un répertoire local synchronisé avec un repo distant.
Recharger la page du projet sur la plateforme distante. Le fichier README.md
créé à l’étape précédente doit maintenant être présent.
Forker un projet¶
Chaque utilisateur dispose de son propre espace distant.

Un utilisateur peut héberger plusieurs repos dans son espace.

Si un repo est public, on peut le copier dans son espace distant avec un fork.

Ici, Lazare Garçin se rend sur la page public du repo myproject
de Adam Labrosse, s’identifie, et fork le projet. Il dispose ensuite d’une copie exacte du projet dans son propre espace.
Cloner un projet¶
Le fork est une copie d’un repo distant vers un espace distant. L’opération permettant de copier un repo distant sur une machine locale est un clonage.

On peut cloner sur sa machine :
les repos dont on est propriétaire ;
les repos publics.
Dans chaque cas, une procédure d’authentification est déclenchée. Il y a 2 alternatives.
l’authentification
https
ne nécessite aucune opération supplémentaire mais le login/password est demandée à chaque transaction:$ git clone https://git.esiee.fr/labrossa/myproject.git
l’authentification
ssh
nécessite un paramétrage (génération de clés SSH et ajout au compte Gitlab), mais elle est ensuite réalisée automatiquement par comparaison des clés locales et distantes:$ git clone git@git.esiee.fr:labrossa/myproject.git
Synchroniser son travail avec le repo distant¶
Tout au long de la vie du projet, vous pouvez être amenés à utiliser plusieurs machines de développement (des machines différentes dans les salles de l’ESIEE, votre machine personnelle, etc…). Si vous maintenez la synchronisation entre repo distant et repo local, vous pourrez disposer à tout moment de la dernière version de votre travail. Vous pouvez utiliser git, depuis le terminal ou depuis Visual Studio Code, pour maintenir la synchronisation entre votre répertoire local et votre repo distant.

Avant une phase de développement, on récupére les modifications depuis le repo distant avec la commande:
$ git pull
Lorsqu’une nouvelle fonctionnalité est implémentée :
on ajoute les fichiers du répertoire à l’index
$ git add .
on enregistre les modifications dans le repo local avec un message explicatif:
$ git commit -m "ajout d'une interface graphique"
on pousse les modifications de la machine locale vers le repo distant
$ git push origin master
Avertissement
Ne pas oublier de pusher votre travail à chaque étape significative du projet.
Travail collaboratif¶
Un projet informatique implique généralement plusieurs contributeurs et il est primordial de disposer d’une version à jour du travail effectué par chacun. Git est très efficace dans ce domaine.

Un prérequis est que le propriétaire du repo distant (Adam Labrosse dans ce cas) invite l’autre développer en lui donnant les droits nécessaires (Developer). Sur la plateforme https://git.esiee.fr:
Project Information > Members > Invite members
une version v1 du projet est développée par Adam Labrosse et incluse dans le repo local ;
le repo local est transféré vers le repo distant ;
Lazare Garçin n’a pas encore contribué au projet. Il récupère le travail de Adam Labrosse en clonant le projet ;
il produit une version v2 en apportant des modifications au projet ;
puis ajoute ses fichiers à l’index ;
les inclut dans le repo local ;
et transfère son repo local modifié vers le repo distant ;
Lazare Garçin récupère la dernière version du repo et dispose maintenant de la v2 sur sa machine.
Avertissement
Sur une autre plateforme, GitHub par exemple, la procédure est similaire même si les termes peuvent varier.
Utilisation plus avancée¶
Git a été utilisé jusqu’à présent de façon basique avec en particulier une seule branche de développement. Pour un projet complexe, on peut mettre en oeuvre un développement sur plusieurs branches.

Chaque disque représente un commit et chaque couleur, une branche différente, indépendante des autres, permettant de développer des fonctionnalités nouvelles sans impacter le projet qui reste toujours dans une version stable.
On peut se familiariser avec la gestion des branches avec Learn Git Branching.
Ressources Git¶
Git est un système de développement logiciel et de versioning puissant, mais sa maitrise avancée nécessite du temps d’apprentissage et de l’expérience. Ci dessous quelques ressources supplémentaires pour approfondir les choses :