Upload
others
View
7
Download
0
Embed Size (px)
Citation preview
Gestion de versions avec Subversion, Git et GitLab
Lucas [email protected]
Licence professionnelle ASRALLAdministration de systèmes, réseaux et applications à base de logiciels libres
Lucas Nussbaum Gestion de versions: Subversion, Git, GitLab 1 / 28
Logiciels de gestion de versionsI Ou Version Control System (VCS)
ou RCS : Revision Control System,ou SCM : Source/Software Code/Control Management
I Permettre la traçabilité d’un développement (plus largement :d’une base de code)� Qui a changé quoi? Pourquoi? Quand? (log, blame)� Qu’est-ce qui a changé exactement? (diff)
I Collaborer : Travailler à plusieurs, en gérant les conflits
I Pas limité au développement logiciel� Administration système (avec outils de gestion de
configuration comme Puppet ou Chef)� Documents (souvent avec LaTeX)
I Principe général : chaque modification est un enregistrement(commit) associé à une description. L’historique est l’ensemble(ordonné) des commits.
Lucas Nussbaum Gestion de versions: Subversion, Git, GitLab 2 / 28
Historique
cf https://en.wikipedia.org/wiki/List_of_revision_control_softwareI SCCS (1972), RCS (1982) : local, fichier par fichier
I CVS (1990) :� Gère un ensemble de fichiers, mais chaque fichier a sa
version� Client-serveur (repository CVS)� Surcouche à RCS
I Subversion (2000) :� Corriger la plupart des défauts de CVS
commits multi-fichiers atomiques, versionnement desrépertoires
� Mais toujours client-serveur
Lucas Nussbaum Gestion de versions: Subversion, Git, GitLab 3 / 28
Historique (2)
Modèle client-serveur limité :I Commits entremêlés si développements simultanésI Incite à faire de gros commits pour garder une séparation logiqueI Ou à utiliser des branches (mais mal supporté dans Subversion)
Emergence des VCS (Version Control Systems) distribués :I BitKeeper (1998), Arch (2001), Darcs (2002), Monotone (2003),
Bazaar (2005), Git (2005), Mercurial (2005)
Git est sorti vainqueur :I Le plus performantI Mais l’un des plus difficiles à maitriser
Lucas Nussbaum Gestion de versions: Subversion, Git, GitLab 4 / 28
Dans ce module
I Subversion� Car c’est la solution client-serveur de référence� Et que les concepts y sont plus simples à comprendre que
dans Git
I Git� Car c’est la solution la plus répandue
I GitLab� Un environnement de développement intégré, autour de Git
Lucas Nussbaum Gestion de versions: Subversion, Git, GitLab 5 / 28
Subversion : bases
I Un dépôt (repository ) : répertoire contenant la base de donnéesde subversion, avec l’historique des modifications
I Des copies de travail ou copies locales (local copy, workingcopy ), sur les postes des développeurs� Conseil : si le dépôt et la copie locale sont sur la même
machine, utilisez des répertoires très différents
~ # r e p e r t o i r e personnel ($HOME)|−− . svnrepos # r e p e r t o i r e contenant les depots| |−− monprojet # un depot| `−− web # un aut re depot`−− dev # r e p e r t o i r e contenant les copies loca les
|−− monprojet # l a copie l o c a l e de monprojet`−− web # l a copie l o c a l e de web
Lucas Nussbaum Gestion de versions: Subversion, Git, GitLab 6 / 28
Subversion : commandes de bases
I Opération centrale : svn commit
� Enregistre une modification (le commit) dans le dépôtI Gestion du dépôt et des copies locales
� svnadmin create nom : crée un dépôt Subversion� svn checkout : récupère une copie d’un dépôt� svn update : met à jour la copie locale à partir des
modifications reportées sur le serveurI Modifications :
� svn status : affiche l’état de la copie locale (fichiersmodifiés, etc)
� svn add : ajoute un fichier au dépôt� svn log : permet de consulter l’historique des modifications� svn diff : permet de visualiser une modification� svn rm : supprime un fichier du dépôt
Lucas Nussbaum Gestion de versions: Subversion, Git, GitLab 7 / 28
TP Subversion
Lucas Nussbaum Gestion de versions: Subversion, Git, GitLab 8 / 28
Git : commandes de baseI Créer un dépôt vide dans le répertoire courant : git init
� Ou récupérer un dépôt existant :git clone url
I Demander à git de suivre un fichier (après l’avoir créé) :git add fichier
� Enregistrer les modifications faites sur un fichier :git commit fichier
� Ou préparer progressivement un commit :git add f1 ; git add f2 ; git commit
(ou git commit -p)� Ou committer toutes les modifications en attente :
git commit -a
I Consulter l’état courant du dépôt : git status
I Envoyer des modifications vers le dépôt distant : git push
I Récupérer les modifications du dépôt distant : git pull
Lucas Nussbaum Gestion de versions: Subversion, Git, GitLab 9 / 28
Git : commandes de base (suite)
I Supprimer un fichier : git rm fichier
I Renommer un fichier : git mv f1 f2
I Consulter l’historique des commits : git log
I Consulter l’historique du code : git blame
I Consulter un commit particulier :git show a245a4e41db52ed76a30732ca97277fdaaad44e9
I Consulter les différences : git diff ...
Lucas Nussbaum Gestion de versions: Subversion, Git, GitLab 10 / 28
Manipuler les tags, l’historique et les branches
I git tag
I git branch
I git rebase
I git checkout
I git reset
I git commit --amend
I git merge
I git fetch
I git bisect
Lucas Nussbaum Gestion de versions: Subversion, Git, GitLab 11 / 28
Commits Git et SHA1
I Pas d’ordre global sur les commits (6= Subversion)
I Chaque commit est identifié par un hash SHA1 de son contenuf01765d134d897ff373e70c4f1df7610b810392e
I On peut aussi y faire référence sous une forme plus courte :git show f017
git show f01765d1
Lucas Nussbaum Gestion de versions: Subversion, Git, GitLab 12 / 28
Staging area / IndexI Git utilise une zone intermédiaire pour préparer les commits,
appelée Index
I git add permet de préparer un commit progressivement(y compris avec des bouts de fichiers : git add -p)� Ou git commit -p (= git add -p + git commit)
The index: principle
Free Electrons. Kernel, drivers and embedded Linux development, consulting, training and support. http://free-electrons.com 26
(image : T. Petazzoni, Free Electrons)Lucas Nussbaum Gestion de versions: Subversion, Git, GitLab 13 / 28
Travailler avec un VCS distribué
création d’une branche(git clone ou git checkout -b)
merge (et correction des conflits éventuels)
Une branche peut-être utilisée :I Par un autre développeur, pour travailler simultanémentI Par le même développeur, pour travailler sur une fonctionnalité
différente (feature branch)
Lucas Nussbaum Gestion de versions: Subversion, Git, GitLab 14 / 28
Travailler avec un VCS distribué
création d’une branche(git clone ou git checkout -b)
merge (et correction des conflits éventuels)
Une branche peut-être utilisée :I Par un autre développeur, pour travailler simultanémentI Par le même développeur, pour travailler sur une fonctionnalité
différente (feature branch)
Lucas Nussbaum Gestion de versions: Subversion, Git, GitLab 14 / 28
Travailler avec un VCS distribué
création d’une branche(git clone ou git checkout -b)
merge (et correction des conflits éventuels)
Une branche peut-être utilisée :I Par un autre développeur, pour travailler simultanémentI Par le même développeur, pour travailler sur une fonctionnalité
différente (feature branch)
Lucas Nussbaum Gestion de versions: Subversion, Git, GitLab 14 / 28
Travailler avec un VCS distribué
création d’une branche(git clone ou git checkout -b)
merge (et correction des conflits éventuels)
Une branche peut-être utilisée :I Par un autre développeur, pour travailler simultanémentI Par le même développeur, pour travailler sur une fonctionnalité
différente (feature branch)
Lucas Nussbaum Gestion de versions: Subversion, Git, GitLab 14 / 28
Travailler avec un VCS distribué
création d’une branche(git clone ou git checkout -b)
merge (et correction des conflits éventuels)
Une branche peut-être utilisée :I Par un autre développeur, pour travailler simultanémentI Par le même développeur, pour travailler sur une fonctionnalité
différente (feature branch)
Lucas Nussbaum Gestion de versions: Subversion, Git, GitLab 14 / 28
Travailler avec un VCS distribué
création d’une branche(git clone ou git checkout -b)
merge (et correction des conflits éventuels)
Une branche peut-être utilisée :I Par un autre développeur, pour travailler simultanémentI Par le même développeur, pour travailler sur une fonctionnalité
différente (feature branch)
Lucas Nussbaum Gestion de versions: Subversion, Git, GitLab 14 / 28
Travailler avec un VCS distribué
création d’une branche(git clone ou git checkout -b)
merge (et correction des conflits éventuels)
Une branche peut-être utilisée :I Par un autre développeur, pour travailler simultanémentI Par le même développeur, pour travailler sur une fonctionnalité
différente (feature branch)
Lucas Nussbaum Gestion de versions: Subversion, Git, GitLab 14 / 28
Travailler avec un VCS distribué
création d’une branche(git clone ou git checkout -b)
merge (et correction des conflits éventuels)
Une branche peut-être utilisée :I Par un autre développeur, pour travailler simultanémentI Par le même développeur, pour travailler sur une fonctionnalité
différente (feature branch)
Lucas Nussbaum Gestion de versions: Subversion, Git, GitLab 14 / 28
En pratique, de nombreuses branches utilisées
Lucas Nussbaum Gestion de versions: Subversion, Git, GitLab 15 / 28
Pas d’organisation ou de workflow imposés (1)
Dépôt local
x
git log, add,commit, etc.
Utilisation localeExemple : etckeeper
Lucas Nussbaum Gestion de versions: Subversion, Git, GitLab 16 / 28
Pas d’organisation ou de workflow imposés (1)
Dépôt local
x
git log, add,commit, etc.
Utilisation localeExemple : etckeeper
Lucas Nussbaum Gestion de versions: Subversion, Git, GitLab 16 / 28
Pas d’organisation ou de workflow imposés (2)
Dépôt distant
Dépôt local
xDépôt local
x
git p
ush
gitpu
ll git push
git pullgit log, add,commit, etc.
Dépôt commun distant(Gitolite, Redmine, FusionForge, GitHub)
Lucas Nussbaum Gestion de versions: Subversion, Git, GitLab 17 / 28
Pas d’organisation ou de workflow imposés (3)
local
Intégrateur
x
public
public public
local local
xDéveloppeur
xDéveloppeur
push
push
push
pull
pull pull
pull
pull request pull request
Utilisation distribuée (GitHub, Linux)
Lucas Nussbaum Gestion de versions: Subversion, Git, GitLab 18 / 28
L’écosystème de GitI Services d’hébergement : GitHub, BitBucket
I Créer son propre hébergement :� Gitolite : simple gestionnaire de dépôts git, sans interface web� GitLab : interface web, gestion de projets (bugs, etc.),� FusionForge, Redmine : solutions intégrées (git, svn, mailing
lists, bug tracker, etc.) plus anciennes
I Visualisation de dépôts sur le web : gitweb
I Outils graphiques :� Visualisation : tig (curses), gitk, giggle� Manipulation : git cola
I Revue de code : Gerrit (cf https://review.openstack.org/), ouintégrée à l’hébergement (GitHub, GitLab)
I Continous Integration/Delivery : Jenkins, ou intégrée àl’hébergement (GitHub, GitLab)
Lucas Nussbaum Gestion de versions: Subversion, Git, GitLab 19 / 28
Exemple : OpenStackAll together now...
Your git branch
master git branch
github
git.o.o
tarballs.o.o
review.o.o
developer
reviewers
infrastructurePEP8
HackingUnit tests
Integration tests
(figure : Thierry Carrez)
Lucas Nussbaum Gestion de versions: Subversion, Git, GitLab 20 / 28
Apprendre Git
De nombreux documents existent (inutile de réinventer la roue) :
I Pro Git : http://git-scm.com/book/fr – livre en françaisObjectif aujourd’hui : survoler le ch 1, faire les exemples du ch 2.Le ch 3 décrit les branches (quasi-nécessaire pour travailler àplusieurs)
I Git Magique : tutoriel, traduit en français(http://www-cs-students.stanford.edu/~blynn/gitmagic/)Analogie avec les jeux vidéos, qui permet de bien expliquercertains concepts difficiles
I http://try.github.com/ : essayer git dans son navigateur
I gittutorial(7)
I Des centaines de ressources sur le Web
Lucas Nussbaum Gestion de versions: Subversion, Git, GitLab 21 / 28
https://xkcd.com/1597/
Lucas Nussbaum Gestion de versions: Subversion, Git, GitLab 22 / 28
TP Git(voir slide précédent)
Lucas Nussbaum Gestion de versions: Subversion, Git, GitLab 23 / 28
GitLab
I Plate-forme intégrée pour la gestion de projets� Gestion du code source (Git)� Gestion des issues (bugs, feature requests, ...)
F Y compris avec des vues orientées Kanban ou gestiondu backlog (Scrum)
� Gestion des processus autour de Git : revue de code, mergerequests
� Gestion des tests (intégration continue)� Gestion du déploiement (intégration avec Docker et
Kubernetes)� Gestion de la documentation : wiki, site web (Gitlab Pages)� Gestion des équipes (groupes) et des permissions
I Alternative libre à GitHub
Lucas Nussbaum Gestion de versions: Subversion, Git, GitLab 24 / 28
Intégration continueI Documentation : https://docs.gitlab.com/ee/ci/ et
https://docs.gitlab.com/ee/ci/yaml/
I À chaque push, GitLab va utiliser un runner pour exécuter un jobsur le projet� Lancement de tests� Génération de paquets� Déploiement� ...
I Les jobs sont spécifiées dans le fichier .gitlab-ci.ymljob1:
script: "execute-script-for-job1"
job2:
script: "execute-script-for-job2"
� De nombreuses possibilités pour décrire les jobs (utilisationde conteneurs Docker, dépendances entre jobs, runnerscustom, etc.)
Lucas Nussbaum Gestion de versions: Subversion, Git, GitLab 25 / 28
GitLab et runner Docker
I Principe : le job est exécuté dans un conteneur Docker, avec uneimage choisie par l’utilisateur
I Deux stratégies possibles :� Utiliser une image de base (debian:buster par exemple) et
installer les dépendances� Construire une image Docker avec les dépendances
préchargées
Lucas Nussbaum Gestion de versions: Subversion, Git, GitLab 26 / 28
TP GitLab
I Sur https://gitlab.univ-lorraine.fr : l’instance GitLab del’université
I Par binôme, tester tous les points du slide précédentI Importez un projet existant pour disposer d’un historique
conséquent� Par exemple
https://github.com/ipaddress-gem/ipaddress
(bibliothèque Ruby pour manipuler les adresses IPv4 et IPv6)I Intégration continue :
� Créez un job qui va vérifier que le code source ne contientpas adress (une faute d’orthographe répandue pour address)
� Créez un job qui va lancer la suite de test avec rake test. Ilfaudra au préalable installer les dépendances
Lucas Nussbaum Gestion de versions: Subversion, Git, GitLab 27 / 28
Notes diverses
I Pour créer un projet sur gitlab pour votre fork de ipaddress1 git clone
https://github.com/ipaddress-gem/ipaddress.git2 Créez votre projet dans l’interface web de GitLab3 cd ipaddress4 git remote set-url origin
https://gitlab.univ-lorraine.fr/VOTREGROUPE/VOTREPROJET.git
Lucas Nussbaum Gestion de versions: Subversion, Git, GitLab 28 / 28