36
Gestion de versions avec Subversion, Git et GitLab Lucas Nussbaum [email protected] Licence professionnelle ASRALL Administration de systèmes, réseaux et applications à base de logiciels libres Lucas Nussbaum Gestion de versions: Subversion, Git, GitLab 1 / 28

Gestion de versions avec Subversion, Git et GitLab · 2020-01-06 · Gestion de versions avec Subversion, Git et GitLab Lucas Nussbaum [email protected] Licence professionnelle

  • Upload
    others

  • View
    7

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Gestion de versions avec Subversion, Git et GitLab · 2020-01-06 · Gestion de versions avec Subversion, Git et GitLab Lucas Nussbaum lucas.nussbaum@univ-lorraine.fr Licence professionnelle

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

Page 2: Gestion de versions avec Subversion, Git et GitLab · 2020-01-06 · Gestion de versions avec Subversion, Git et GitLab Lucas Nussbaum lucas.nussbaum@univ-lorraine.fr Licence professionnelle

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

Page 3: Gestion de versions avec Subversion, Git et GitLab · 2020-01-06 · Gestion de versions avec Subversion, Git et GitLab Lucas Nussbaum lucas.nussbaum@univ-lorraine.fr Licence professionnelle

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

Page 4: Gestion de versions avec Subversion, Git et GitLab · 2020-01-06 · Gestion de versions avec Subversion, Git et GitLab Lucas Nussbaum lucas.nussbaum@univ-lorraine.fr Licence professionnelle

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

Page 5: Gestion de versions avec Subversion, Git et GitLab · 2020-01-06 · Gestion de versions avec Subversion, Git et GitLab Lucas Nussbaum lucas.nussbaum@univ-lorraine.fr Licence professionnelle

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

Page 6: Gestion de versions avec Subversion, Git et GitLab · 2020-01-06 · Gestion de versions avec Subversion, Git et GitLab Lucas Nussbaum lucas.nussbaum@univ-lorraine.fr Licence professionnelle

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

Page 7: Gestion de versions avec Subversion, Git et GitLab · 2020-01-06 · Gestion de versions avec Subversion, Git et GitLab Lucas Nussbaum lucas.nussbaum@univ-lorraine.fr Licence professionnelle

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

Page 8: Gestion de versions avec Subversion, Git et GitLab · 2020-01-06 · Gestion de versions avec Subversion, Git et GitLab Lucas Nussbaum lucas.nussbaum@univ-lorraine.fr Licence professionnelle

TP Subversion

Lucas Nussbaum Gestion de versions: Subversion, Git, GitLab 8 / 28

Page 9: Gestion de versions avec Subversion, Git et GitLab · 2020-01-06 · Gestion de versions avec Subversion, Git et GitLab Lucas Nussbaum lucas.nussbaum@univ-lorraine.fr Licence professionnelle

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

Page 10: Gestion de versions avec Subversion, Git et GitLab · 2020-01-06 · Gestion de versions avec Subversion, Git et GitLab Lucas Nussbaum lucas.nussbaum@univ-lorraine.fr Licence professionnelle

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

Page 11: Gestion de versions avec Subversion, Git et GitLab · 2020-01-06 · Gestion de versions avec Subversion, Git et GitLab Lucas Nussbaum lucas.nussbaum@univ-lorraine.fr Licence professionnelle

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

Page 12: Gestion de versions avec Subversion, Git et GitLab · 2020-01-06 · Gestion de versions avec Subversion, Git et GitLab Lucas Nussbaum lucas.nussbaum@univ-lorraine.fr Licence professionnelle

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

Page 13: Gestion de versions avec Subversion, Git et GitLab · 2020-01-06 · Gestion de versions avec Subversion, Git et GitLab Lucas Nussbaum lucas.nussbaum@univ-lorraine.fr Licence professionnelle

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

Page 14: Gestion de versions avec Subversion, Git et GitLab · 2020-01-06 · Gestion de versions avec Subversion, Git et GitLab Lucas Nussbaum lucas.nussbaum@univ-lorraine.fr Licence professionnelle

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

Page 15: Gestion de versions avec Subversion, Git et GitLab · 2020-01-06 · Gestion de versions avec Subversion, Git et GitLab Lucas Nussbaum lucas.nussbaum@univ-lorraine.fr Licence professionnelle

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

Page 16: Gestion de versions avec Subversion, Git et GitLab · 2020-01-06 · Gestion de versions avec Subversion, Git et GitLab Lucas Nussbaum lucas.nussbaum@univ-lorraine.fr Licence professionnelle

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

Page 17: Gestion de versions avec Subversion, Git et GitLab · 2020-01-06 · Gestion de versions avec Subversion, Git et GitLab Lucas Nussbaum lucas.nussbaum@univ-lorraine.fr Licence professionnelle

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

Page 18: Gestion de versions avec Subversion, Git et GitLab · 2020-01-06 · Gestion de versions avec Subversion, Git et GitLab Lucas Nussbaum lucas.nussbaum@univ-lorraine.fr Licence professionnelle

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

Page 19: Gestion de versions avec Subversion, Git et GitLab · 2020-01-06 · Gestion de versions avec Subversion, Git et GitLab Lucas Nussbaum lucas.nussbaum@univ-lorraine.fr Licence professionnelle

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

Page 20: Gestion de versions avec Subversion, Git et GitLab · 2020-01-06 · Gestion de versions avec Subversion, Git et GitLab Lucas Nussbaum lucas.nussbaum@univ-lorraine.fr Licence professionnelle

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

Page 21: Gestion de versions avec Subversion, Git et GitLab · 2020-01-06 · Gestion de versions avec Subversion, Git et GitLab Lucas Nussbaum lucas.nussbaum@univ-lorraine.fr Licence professionnelle

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

Page 22: Gestion de versions avec Subversion, Git et GitLab · 2020-01-06 · Gestion de versions avec Subversion, Git et GitLab Lucas Nussbaum lucas.nussbaum@univ-lorraine.fr Licence professionnelle

En pratique, de nombreuses branches utilisées

Lucas Nussbaum Gestion de versions: Subversion, Git, GitLab 15 / 28

Page 23: Gestion de versions avec Subversion, Git et GitLab · 2020-01-06 · Gestion de versions avec Subversion, Git et GitLab Lucas Nussbaum lucas.nussbaum@univ-lorraine.fr Licence professionnelle

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

Page 24: Gestion de versions avec Subversion, Git et GitLab · 2020-01-06 · Gestion de versions avec Subversion, Git et GitLab Lucas Nussbaum lucas.nussbaum@univ-lorraine.fr Licence professionnelle

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

Page 25: Gestion de versions avec Subversion, Git et GitLab · 2020-01-06 · Gestion de versions avec Subversion, Git et GitLab Lucas Nussbaum lucas.nussbaum@univ-lorraine.fr Licence professionnelle

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

Page 26: Gestion de versions avec Subversion, Git et GitLab · 2020-01-06 · Gestion de versions avec Subversion, Git et GitLab Lucas Nussbaum lucas.nussbaum@univ-lorraine.fr Licence professionnelle

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

Page 27: Gestion de versions avec Subversion, Git et GitLab · 2020-01-06 · Gestion de versions avec Subversion, Git et GitLab Lucas Nussbaum lucas.nussbaum@univ-lorraine.fr Licence professionnelle

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

Page 28: Gestion de versions avec Subversion, Git et GitLab · 2020-01-06 · Gestion de versions avec Subversion, Git et GitLab Lucas Nussbaum lucas.nussbaum@univ-lorraine.fr Licence professionnelle

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

Page 29: Gestion de versions avec Subversion, Git et GitLab · 2020-01-06 · Gestion de versions avec Subversion, Git et GitLab Lucas Nussbaum lucas.nussbaum@univ-lorraine.fr Licence professionnelle

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

Page 30: Gestion de versions avec Subversion, Git et GitLab · 2020-01-06 · Gestion de versions avec Subversion, Git et GitLab Lucas Nussbaum lucas.nussbaum@univ-lorraine.fr Licence professionnelle

https://xkcd.com/1597/

Lucas Nussbaum Gestion de versions: Subversion, Git, GitLab 22 / 28

Page 31: Gestion de versions avec Subversion, Git et GitLab · 2020-01-06 · Gestion de versions avec Subversion, Git et GitLab Lucas Nussbaum lucas.nussbaum@univ-lorraine.fr Licence professionnelle

TP Git(voir slide précédent)

Lucas Nussbaum Gestion de versions: Subversion, Git, GitLab 23 / 28

Page 32: Gestion de versions avec Subversion, Git et GitLab · 2020-01-06 · Gestion de versions avec Subversion, Git et GitLab Lucas Nussbaum lucas.nussbaum@univ-lorraine.fr Licence professionnelle

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

Page 33: Gestion de versions avec Subversion, Git et GitLab · 2020-01-06 · Gestion de versions avec Subversion, Git et GitLab Lucas Nussbaum lucas.nussbaum@univ-lorraine.fr Licence professionnelle

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

Page 34: Gestion de versions avec Subversion, Git et GitLab · 2020-01-06 · Gestion de versions avec Subversion, Git et GitLab Lucas Nussbaum lucas.nussbaum@univ-lorraine.fr Licence professionnelle

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

Page 35: Gestion de versions avec Subversion, Git et GitLab · 2020-01-06 · Gestion de versions avec Subversion, Git et GitLab Lucas Nussbaum lucas.nussbaum@univ-lorraine.fr Licence professionnelle

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

Page 36: Gestion de versions avec Subversion, Git et GitLab · 2020-01-06 · Gestion de versions avec Subversion, Git et GitLab Lucas Nussbaum lucas.nussbaum@univ-lorraine.fr Licence professionnelle

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