Skip to content

Contrôle de version et Git

Le contrôle de version

Qu'est-ce que le contrôle de version ?

Les buts premiers d'un logiciel de contrôle de version sont:

  • Suivre les modifications apportées à un ou des fichiers
    • Modifications des données
    • Horodatage des modifications
    • Informations sur les auteurs
    • Raisons des modifications
  • Revenir en arrière si besoin
  • Travailler temporairement sur des versions alternatives (branches)

Ces outils sont omniprésents dans l'informatique moderne:

  • Suites bureautiques: MS Word, Libre Office, ...
  • Gestion de code: Git, SVN, Mercurial, CVS, SourceSafe, etc ...
  • Archivages automatiques de disques

Quels cas d'usages ?

Voici quelques cas pour lesquels la gestion de version est primordiale:

  • Vous travaillez en groupe et un collègue a introduit un bug dans la dernière version. Vous devez faire une démonstration dans une heure : en un clic, vous revenez à la dernière version fonctionnelle
  • Vous vous demandez qui a modifié telle section d'un document (rapport, contrat) qui vous semble fausse
  • On vient vous voir pour un comportement qui a changé entre la v2 et la v3. Vous en êtes à la v7 et toute l'équipe a changé depuis. Vous reconstruisez la v2. Vous reconstruisez la v3. En comparant les journaux de fonctionnement, vous isolez le fichier fautif, et avec les commentaires de chaque version, vous retrouvez la raison des changements et le défaut de logique.
  • Vous avez travaillé pendant trois mois sur votre machine sans sauvegarde et votre disque crash la veille du rendu (très classique chez les étudiants)
  • Vous avez travaillé sur un projet seul pendant un an, vous trouvez un bug et vous n’avez aucune idée d’où ça vient. Vous testez les versions par dichotomie et vous trouvez rapidement le commit qui introduit le bug.
  • Même chose sur un projet d’équipe, et là, vous avez le nom de l’auteur du commit et vous pouvez aller lui demander.

Git

Présentation

Git est un logiciel de gestion de version pour des fichiers. C'est un outil incontournable pour l'ingénieur, même non informaticien: que ce soit pour des logiciels ou des documents issus d'une collaboration, Git s'est imposé comme la norme et est la version la plus utilisée de logiciel de contrôle de version.

Attention

Il est important de réaliser que si vous êtes bloqués en Git pour quelque raison que ce soit, vous devez consacrer du temps à vous débloquer, en demandant de l'aide, en continuant à vous former, car l'impasse sur Git n'est pas possible.

Cette UE a pour but de vous fournir des bases pour un démarrage rapide avec Git. Pour une aide plus (très) complète sur Git, consultez la documentation officielle.

Les principes de Git

Les éléments principaux de Git sont:

  • Le dépôt, qui est l'ensemble des répertoires et fichiers que vous voulez voir gérés par Git
  • Un répertoire .git dans le répertoire racine du dépôt
    • contient tout l'historique des modifications sur tous les fichiers
    • on parle de dépôt local
  • Un dépôt hébergé par un serveur du type GitLab ou GitHub
    • on parle de dépôt distant ou remote
  • Des versions alternatives du dépôt
    • on parle de branches
  • Un gestionnaire de différences de fichiers capable de fusionner (dans la majeure partie de cas) deux versions différentes en une seule
    • on parle de merge

Attention

Il ne faut jamais modifier ce répertoire .git ou son contenu.

Git est un logiciel très complet avec une énorme quantité d'options. For heureusement, il est très verbeux et vous donne de nombreux messages quasiment à chaque commande.

Exemple lors d'une commande Git:

git checkout 5c7855194611cb1c96f8531b736aa59a7d646df1
Note : basculement sur '5c7855194611cb1c96f8531b736aa59a7d646df1'.

Vous êtes dans l'état « HEAD détachée ». Vous pouvez visiter, faire des modifications
expérimentales et les valider. Il vous suffit de faire un autre basculement pour
abandonner les commits que vous faites dans cet état sans impacter les autres branches.

Si vous voulez créer une nouvelle branche pour conserver les commits que vous créez,
il vous suffit d'utiliser l'option -c de la commande switch comme ceci :

  git switch -c <nom-de-la-nouvelle-branche>

Ou annuler cette opération avec :

  git switch -

Désactivez ce conseil en renseignant la variable de configuration advice.detachedHead à false

HEAD est maintenant sur 5c78551 test

Prenez le temps de les lire !

Installation et Configuration

Git est normalement installé par défaut sur la plupart des systèmes (voir introduction).

Vérifiez la version:

git -v
git version 2.42.

Toute modification faite sur un fichier via Git va enregistrer, en plus des modifications, l'auteur et son email.

Vous devrez donc commencer par configurer Git pour enregistrer vos identifiants par défaut pour tous vos projets.

Pour enregistrer vos identifiants pour TOUS vos projets:

git config --global user.name "votre nom"
git config --global user.email "vous@telecom-paris.fr"

Pour enregistrer vos identifiants pour le projet courant:

git config user.name "votre nom"
git config user.email "vous@telecom-paris.fr"

L'option --global pour git config indique que la configuration est pour l'utilisateur (fichier ~/.gitconfig).

Sans cette option, git config lit et écrit les données de configuration du dépôt courant (fichier mon_projet/.git/config).

Vous pouvez vérifier les informations de configuration en ne mettant pas de valeur:

git config --global user.name
git config user.email

Toute modification faite sur un fichier via Git va aussi enregistrer un message décrivant les modifications. Dans certains cas, ce message sera à éditer par l'utilisateur, et vous pouvez donc configurer l'éditeur texte de votre choix. Pour les débutants, nous recommandons nano:

git config --global core.editor nano

Git au quotidien

Vous n'aurez sûrement pas besoin de toute l'artillerie de Git à chaque séance de travail. Dans la majeure partie des cas, vous ferez toujours la séquence suivante:

  • Récupérer les modifications sur le dépôt distant via git pull
  • Faire des modifications sur un projet, et créer un commit en local
  • Ajouter les fichiers à enregistrer via git add
  • Acter la modification via git commit
  • Envoyer vos commits locaux vers le dépôt distant via git push

Nous verrons dans les sections suivantes ces cas d'usages plus en détail.

Dépôts

Qu'est-ce qu'un dépôt Git ?

Un dépôt Git, ce sont les données du système de contrôle de version, c'est-à-dire au moins toutes les versions de tous les fichiers (ou un moyen de les reconstituer). C'est aussi toutes les informations d'auteur, de temps, de dépendance, de branches...

En anglais, on parle de repository.

Le dépôt se trouvant sur votre machine s'appelle le dépôt local et vous permet de travailler et enregistrer l'historique dans Git sans avoir besoin de connexion réseau.

Les dépôts se trouvant ailleurs s'appellent dépôts distants et vous permettent de:

  • partager votre travaille pour des projets collaboratifs
  • sauvegarder votre travaille sur des machines sûres
  • simplifier l'ajout de vos contributions à des projets existants (voir Git avancé).

Info

Git ne suit pas un modèle maître esclave où un unique serveur détient un unique dépôt partagé. Il est conçu pour travailler avec autant de dépôts distants que désiré, ce qui complique un peu la compréhension mais ouvre de nombreuses possibilités aux développeurs: dépôts privés, dépôts publiques, etc...)

Répertoires et dépôt

Git ne raisonne pas en termes de répertoire. Si vous créez un répertoire vide et tentez de l'ajouter au dépôt, Git ignorera cette demande. Pour ajouter un répertoire à votre dépôt, il suffit d'ajouter au moins un fichier contenu dans ce répertoire.

Vous n'avez pas de limitation sur le nombre de fichiers ou de répertoires/sous-répertoires que vous pouvez avoir dans un dépôt, alors utilisez ceci pour mieux organiser vos projets.

Dépôts distants

Travailler à plusieurs sur un dépôt implique de passer par un dépôt distant, hébergé le plus souvent sur GitHub ou un serveur Gitlab.

Ce dépôt est identifié par une adresse commençant par:

  • https://: dans ce cas, l'authentification est limitée à un classique login/password.

Attention

La plupart des serveurs n'autorisent pas l'accès en écriture dans ce mode.

  • git@: authentification via clés SSH, à utiliser de préférence

Pour faire une copie de ce dépôt en local, utilisez git clone URL.

Info

Pour vos projets hébergés sur gitlab.telecom-paris.fr et créés par vos enseignants, il faut d'abord vous connecter au serveur en utilisant le SSO. Pensez à ajouter votre clé publique SSH dans vos préférences de compte.

Exemple pour le serveur Gitlab de Telecom Paris:

  • accès en lecture seule

    git clone https://gitlab.telecom-paris.fr/proj103/admin/ue_outils.git
    

  • accès en lecture/écriture via SSH

    git clone git@gitlab.enst.fr:proj103/admin/ue_outils.git
    

Initier un dépôt local

Pour créer un nouveau dépôt Git sur votre ordinateur, créez un répertoire du nom de votre choix (éviter les espaces), accédez-y puis tapez git init:

mkdir mon_projet_s1_p1
cd mon_projet_s1_p1
git init

Pour pousser ce dépôt local sur un serveur distant, il vous faut un serveur avec des droits d'écriture et création de dépôt, ce qui n'est pas toujours le cas. Vous allez ensuite ajouter ce serveur en lui donnant un nom, local à votre dépôt, et l'adresse correspondante:

git remote add origin git@github.com/monorg/monproj

Ensuite vous n'avez plus qu'à dire à Git de mettre votre version courante (branche locale) sur ce serveur sous le nom de main (ou master ou ...):

git push --set-upstream origin main

Récupérer les modifications d'un dépôt distant

Dans un projet collaboratif, les modifications sur les fichiers peuvent apparaître à n'importe quel moment sur le dépôt distant. Afin de les voir localement, par exemple avant de commencer une session de travail, il faudra:

  • récupérer la liste des modifications
  • appliquer les modifications à vos fichiers locaux

La plupart du temps, ces deux opérations sont cumulées en une seule commande git pull.

Publier les modifications sur un dépôt distant

Une fois votre travail terminé, vous voudrez envoyer vos modifications sur le dépôt principal de votre projet. On utilise pour cela la commande git pushet on parlera de pousser ses modifications.

Avant de démarrer

Dans les sections suivantes, pour tester Git, nous supposons que vous travaillez dans un dépôt créé par vous localement via git init. Vous pouvez faire en parallèle les exercices pour mieux comprendre les notions abordées.