Les systèmes de gestion de version¶
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 …¶
Ou¶

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¶
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