Introduction à l`orienté objet - e

Transcription

Introduction à l`orienté objet - e
Systèmes de gestion de
version
Jean-Jacques LE COZ
Introduction

L'art de gérer les changements d'information
Pour quoi faire ?



Pour gérer les différentes versions
d'un logiciel
Pour
permettre
à
plusieurs
développeurs
de
travailler
en
collaboration
Pour
contrôler
l'accès et
les
modifications apportées au logiciel
Fonctionnalités






Importation et exportation de
projets
Accès concurrentiels
Suivi de l'historique
Visualisation des différences
Retour à des anciennes versions
Création d'un nouveau projet à
partir d'un ancien
Systèmes existants (1)

Contrôle par verrouillage des fichiers
SCCS (Source Code Control System)

RCS (Revision Control System)

Systèmes existants (2)

Evolutions avec les logiciels libres

CVS (Concurrent Version system)


Subversion



Amélioration de CVS
Gestion des répertoires
Meta-CVS


Très répandu (Sourceforge)
Gestion des répertoires, sur-couche de CVS
arch

Gestion décentralisée
Systèmes existants (3)

Autres solutions

Bitkeeper


Choisi pour le développement du noyau Linux 2.5
Git

Développé par la communauté Linux

Choisi pour les développements du noyau Linux à
partir de la version 2.6

Rational software
Gérant de systèmes

Systèmes capables de piloter les
logiciels de contrôle de versions.
Copies automatiques dans
l'environnement de développement

Reconstruction automatique des projets

Personnalisation


Exemple de logiciel

CruiseControl

cruisecontrol.sourceforge.net
Plateformes de gestion de
projets

SourceForge


Commercialise son architecture
LibreSource
Produit libre
 Basé sur Java/J2EE
 Fortement orienté services


Travail collaboratif pour communautés
distribuées
Plateforme LibreSource
Subversion

Logiciel libre
Licence compatible avec la Debian
Free Software Guidelines

«Open source», modifiable et
redistribuable

Hébergé par la communauté Tigris

Au départ une communauté employée
par la société CollabNet (début 2000)

Disponible depuis août 2001


Subversion :
fonctionnalités








Prise en compte des répertoires
Véritable gestion d'historique
Commit atomique
Méta-données
Choix de la couche réseau
Gestion de la cohérence
Gestion efficace des branches
Modifiable (librairies C avec API)
Architecture de pilotage
ligne de commande
Système de fichier
intégration dans
un IDE
Protocole réseau
Subversion
navigateur Web
Protocole Webdav
Repository
Subversion : composants
(1)

svn


svnversion


Une commande de reporting
svnlook


La commande ligne
Un outil d'inspection
svnadmin

Un outil d'administration
Subversion : composants
(2)

svndumpfilter


mod_dav_svn


Un outil de filtrage des dump
Un plugin pour le serveur HTTP apache
svnserve

Le serveur standalone de Subversion
Commandes

Commande sans objet


Commande avec item


Portée locale sur un item
Commande avec URL


Portée locale
Portée repository
Commande d'administration avec
chemin

Portée repository système de fichier
Concept de révision
Utiliser Subversion

Création d'une repository



Par défaut le système de gestion des données est Berkeley
DB
Stockage d'un projet



svnadmin create chemin/repo
svn import /chemin/racineprojet file:///chemin/repo -m
''mot clef''
svn import /chemin/racineprojet http://url/chemin/repo -m
''mot clef''
Récupération d'un projet

svn checkout file:///chemin/repo

svn checkout http://url/chemin/repo
Utiliser Subversion

Après modification d'une copie, pour
voir les différences avec la repository


Commit de la nouvelle version


svn diff
svn commit
Synchroniser sa copie locale avec la
repository

svn update
Utiliser Subversion

Pour savoir ce qui a changé dans votre
copie locale


Pour défaire ce qui a été modifié dans
votre copie locale
svn revert
Pour obtenir des informations sur
l'historique d'un item

svn log


svn -uv status
Utiliser Subversion

Pour examiner le contenu d'une
version précédente dans la copie
locale


svn cat
Pour lister les fichiers directement
dans la copie locale

svn list
Utiliser Subversion


Connaitre la structure d'une repository

svnlook tree /chemin/repository
Aide des commandes

svn help commande

svnadmin help commande

svnlook help commande

etc
Structure de la repository
(1)

Répertoire conf


Répertoire dav


Fichiers de configuration
Pour l'intégration avec Apache
Répertoire db

Stockage des versions
Structure de la repository
(2)

Fichier format


Répertoire hooks


Squelettes de scripts (trigger)
Répertoire locks


Version de la repository
Pour gérer les verrous d'accès
Fichier README.txt
Structure de la copie locale

Structure du projet


Dépend de la profondeur du chemin
indiqué à la commande checkout
Répertoire .svn

Répertoire local d'administration

Copies des versions

HEAD, BASE, COMMITTED, PREV
Concept de copie locale
Codification des rapports
de changement
code
A
C
D
M
R
X
?
!
~
I
Signification
Item ajouté
Item en conflit
Item supprimé
Item modifié
Item remplacé
Item non versionné
Item non pris en compte par Subversion
Item incomplet
Item de nature différente par rapport à la repository
Item ignoré
Gestion des conflits
Gestion des conflits

USE CASE (1)
utilisateur A :
$> svn checkout file:///home/dupont/subversion/repo
A fichier.txt
Checked out revision 1.
$> ls repo
fichier.txt
Gestion des conflits

USE CASE (2)
utilisateur B :
$> svn checkout file:///home/dupont/subversion/repo
A fichier.txt
Checked out revision 1.
$> ls repo
fichier.txt
Gestion des conflits

USE CASE (3)
utilisateur A :
$> cd repo
$> date >> fichier.txt
$> svn commit
Log message unchanged or not specified
a)bort, c)ontinue, e)dit
c
Sending
fichier.txt
Transmitting file data .
Committed revision 2.
Gestion des conflits

USE CASE (4)
utilisateur B :
$> cd repo
$> echo $HOSTNAME >> fichier.txt
$> svn commit
Log message unchanged or not specified
a)bort, c)ontinue, e)dit
c
Sending
fichier.txt
svn: Commit failed (details follow):
svn: Out of date: '/fichier.txt' in transaction '1e'
Gestion des conflits

USE CASE (5)
utilisateur B :
$> svn update
C fichier
Updated to revision 2.
$> cat fichier.txt
mer déc 12 15:04:28 CET 2003
>>>>>>> .r2
<<<<<<< .mine
Linux
Gestion des conflits

USE CASE (6)
utilisateur B :
$> ls
fichier.txt fichier.txt.mine fichier.txt.r1 fichier.txt.r2
$ svn resolved fichier.txt
$> ls
fichier.txt
// édition et gestion des conflits à la main
$ svn commit
Branches avec Subversion




Une branche est la scission d'un projet
Une branche est une copie d'un projet
La branche partage le même historique
que le projet original
Au cours de son cycle de vie, la
branche diffère du projet original
Branches
Créer et utiliser les
branches
USE CASE (1) utilisateur dupont
$> svnadmin create ~/subversion/repoA
$> cd temp/copie-travail
$> mkdir data
$> date > data/fichier.txt
$> svn import copie-travail/ file:///home/dupont/subversion/repoA/
$> svnlook tree ~/subversion/repoA
/
data/
fichier.txt
Créer et utiliser les
branches
USE CASE (2) utilisateur martin
$> checkout svn checkout file:///home/dupont/subversion/repoA
A repoA/data
A repoA/data/fichier.txt
Checked out revision 1.
$> ls repoA
.
.. data
.svn
Créer et utiliser les
branches
USE CASE (3) utilisateur martin
$> svn mkdir branche1
$> ls
branche1
data
$> ls -a branche1
.
.. .svn
$> svn copy data/ branche1/data-branche
$> ls -a branche1
.
.. data-branche
.svn
$> svn commit
Créer et utiliser les
branches
USE CASE (4) utilisateur martin
$> svn copy file:///home/dupont/subversion/repoA \
file:///home/dupont/subversion/repoA/branche2
$> svnlook tree /home/dupont/subversion/repoA
/
branche1/
data-branche/
fichier.txt
branche2/
fichier.txt
data/
fichier.txt
Créer et utiliser les
branches
USE CASE (5) utilisateur martin
$> svn checkout file:///home/dupont/subversion/repoA/branche1
$> ls
branche1
$> cd branche1
$> ls -a
.
.. data-branche
.svn
$> date +%A >> data-branche/fichier.txt
$> svn commit
$> svn -v log data-branche/fichier.txt
Créer et utiliser les
branches
USE CASE (6) utilisateur dupont
$> svn update
$> svn cat data/fichier.txt // fichier inchangé
$> svn -v log data/fichier.txt
Voir l'historique d'une
branche

Commande Subversion


svn log –verbose –stop-on-copy
Retrace l'historique depuis la
scission avec le projet initial
Copier les changements
entre branches

Commande subversion

svn merge options




svn merge URL1 URL2 copieLocale
svn merge -r revision1:revision2 URL
copieLocale
svn merge -r revision1:revision2 URL
Identique à la commande svn diff

Au lieu de lister les différences, elle les copie
Copier toute une branche
$> cd brancheInitiale
$> svn log --verbose --stop-on-copy file:///chemin/brancheNouvelle
$> svn update
$> svn merge -r 200:250 file:///chemin/brancheNouvelle
$> svn commit
Défaire les changements

Retrouver une version précédente


svn merge -r revisionN:revisionN-1
URL
Retrouver des fichiers supprimés

svn copy -r revision (avant la
suppression)
Bibliographie

Version Control with subversion – B. CollinsSussman, W. FitzpatrickC, M. Pilato

Documents pareils