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.

_images/git-02.png

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.

_images/git-03.png

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.

_images/git-04.png

Il faut ensuite créer le repo distant proprement dit :

  1. New project

  2. Create blank project

  3. Project name : myproject

  4. Visibility level : Public

  5. 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.

_images/git-07.png

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

_images/git-08.png

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

_images/git-09.png

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.

_images/git-10.png

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.

_images/git-11.png

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.

_images/git-12.png

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
  1. une version v1 du projet est développée par Adam Labrosse et incluse dans le repo local ;

  2. le repo local est transféré vers le repo distant ;

  3. Lazare Garçin n’a pas encore contribué au projet. Il récupère le travail de Adam Labrosse en clonant le projet ;

  4. il produit une version v2 en apportant des modifications au projet ;

  5. puis ajoute ses fichiers à l’index ;

  6. les inclut dans le repo local ;

  7. et transfère son repo local modifié vers le repo distant ;

  8. 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.

_images/git-06.png

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 :