Les systèmes de gestion de version

GitDépôts

roza ( @ ) univ-orleans.fr

Les problématiques de la gestion de version

Problématique 1

conserver l’historique des modifications apportées chaque jour … et revenir en arrière en cas de besoin

Problématique 2

  • partager le développement entre plusieurs personnes

  • permettre un accès partagé au système de fichiers versionné

  • permettre un accès distant depuis diverses plateformes

  • retrouver rapidement l’origine d’un Bug en cas de régression

Problématique 3

Comment gérer des distributions ?

\(\hookrightarrow\) plusieurs versions peuvent coexister ( branches de développement, branches beta, branches production )

Problématique 4

Utiliser de l’intégration continue (Gitlab, Github, Jenkins, etc.)

\(\hookrightarrow\) introduire des vérifications, tests, production d’artefacts lors d’une mise à jour d’un dépôt.

Complexe

Multiples branches à gérer en parallèle …

Multiples branches à gérer en parallèle …

Ou

Branches de chrome…

Branches de chrome…

Un logiciel de gestion de version

  • Agit sur une arborescence de fichiers

  • Permet de mutualiser un développement

  • Permet de stocker toute évolution du code source

\(\hookrightarrow\) Ajoute une nouvelle dimension au système de fichiers: le temps

2 modèles principaux

  • Centralisés

  • Décentralisés

Centralisés 👹

  • Style CVS ou SVN

  • un seul dépôt de référence

  • besoin d’un serveur

  • besoin de synchronisation

  • conflits plus fréquents …

Décentralisés 🔆

  • plusieurs dépôts pour un même logiciel

  • chacun peut travailler à son rythme

  • de façon synchronisée ou pas des autres

Systèmes décentralisés

  • Bazaar

  • Mercurial

  • Git

Avantages ⭐️

  • ne pas être dépendant d’une machine

  • travailler sans connexion

  • participation “progressive” à un projet:

    • accès au code

    • contribution proposée

    • contributeur “actif” si acceptée

Dépôt de référence

  • Dépôt contenant les versions livrées d’un projet

  • Un dépôt est un emplacement central où sont stockées :

    • l’historique des versions des fichiers

    • les logs

    • les dates, auteurs, tags, etc.

Dépôt 📂

Un dépôt apparaît de l’extérieur comme un système de fichiers composé de répertoires au sein desquels on peut naviguer, lire et écrire selon les permissions dont on dispose.

main (ou Trunck en SVN) 🌳

  • Version principale

  • à partir d’elle, on peut crééer des branches

Branches 🌵

  • un développement « secondaire » est mis en route

  • nouvelle fonctionnalité

  • correction de bugs, etc.

Destin d’une branche

  • Une branche peut soit être à nouveau fusionnée dans le « main »

  • soit disparaître

  • soit donner lieu à un nouveau programme. On parle alors de fork

Le Checkout

  • consiste à récupérer pour la première fois les fichiers déjà existant au sein d’un projet du dépôt

  • Le résultat est une copie de travail

  • Sous git cela consiste aussi à choisir sa branche de travail

Ajout

Pour ajouter un fichier spécifique:

git add monfic

Pour ajouter tout le contenu du répertoire courant:

git add .

Commit ⛳️

  • Met à jour la copie locale (puis si on veut, le dépôt)

  • Une nouvelle révision est alors créée

  • il faut que la copie de travail corresponde à la dernière version du dépôt

  • un message est associé au commit

  • éventuellement un tag

Message de commit ⛳️

git commit -m "added a wonderful new feature"

ou si on veut ajouter en même temps les modifications portant sur des fichiers existants :

git commit -am "added a wonderful new feature"

update (pull) 🆕

  • L’update synchronise la copie de travail locale avec le dépôt

  • en récupérant la dernière version des fichiers du dépôt

  • C’est à cette occasion que des conflits de version peuvent apparaître :)

Merge

  • Fusion de branches entre elles

  • Fusion d’une branche avec le main (main)

Schéma

Commits, branches et merge git commits et branches

Conflits 🤼‍♂️

  • certaines modifications peuvent être contradictoires

  • par exemple lorsque deux personnes ont apporté des modifications différentes à la même partie d’un fichier …

  • il faut alors résoudre ce conflit !

Diff

  • Permet d’afficher les différence entre deux versions d’un fichier

  • kdiff pour linux ou autres

mergetools

  • vscode

  • atom

  • vim

  • kdiff3

  • opendiff