Marcel Bosc

gestionnaire de versions « subversion »

Université Paris-13

Département informatique

IUT de Villetaneuse

2005-2006

table des matières

présentation

principes du partage de fichiers
- le problème
- une solutions simple
- copie-modification-fusion

utilisation de subversion
- commandes simples
- svn à l'IUT de Villetaneuse

les conflits
- exemple de fusion sans conflit
- exemple de conflit
- gestions des conflits

présentation

1ère partie

travailler à plusieurs

class Essai

{

int taille;

...

fichier: Essai.java

programmeur

programmeur

programmeur

dépôt et copie locale

class Essai

{

int taille;

...

fichier: Essai.java

class Essai

{

int taille;

...

fichier: Essai.java

serveur

dépot

(repository)

copie locale

réseau

lecture

écriture

programmeur

historique de toutes les versions

temps

tout l'historique est conservé

on peut « revenir en arrière »

principe du partage des fichiers

2ème partie

le problème

une solutions simple

copie-modification-fusion

problème

A

dépôt

lecture

lecture

deux utilisateurs accèdent au même fichier et le copient chez eux

A

François

A

Karim

problème

A

A'

François

A''

Karim

dépôt

chacun modifie son fichier

problème

A'

A'

François

A''

Karim

dépôt

François écrit ses modifications

écriture

problème

A''

A'

François

A''

Karim

dépôt

Karim écrit ses modifications

écriture

!

Il détruit les modifications

de François!

une solution simple

Verrouiller le fichier avant de travailler dessus

mais insuffisante

solution simple

A

A

François

Karim

dépôt

lecture

François accède au fichier:

1. il le verrouille

2. il le copie chez lui

A

A'

François

Karim

dépôt

Karim veut accéder au fichier:

il est verrouillé!

Karim doit attendre

déjà verouillé!

solution simple

A'

A'

François

Karim

dépôt

François écrit ses modifications:

1. il écrit sur le dépôt

2. il déverrouille

écriture

déverrouillage

solution simple

solution simple

A'

A'

François

A'

Karim

dépôt

Le fichier étant déverrouillé Karim peut y accéder:

1. il le verrouille

2. il le copie ...

lecture

limites de la solution simple

Si François verrouille le fichier et l'oubli, Karim restera bloqué

Deux utilisateurs ne peuvent pas modifier des endroits différents d'un gros fichier

copie-modification-fusion

pas de verrou persistant

la solution choisie

A

dépôt

lecture

lecture

deux utilisateurs accèdent au même fichier et le copient chez eux

A

François

A

Karim

copie-modification-fusion

A

A'

François

A''

Karim

dépôt

chacun modifie son fichier

copie-modification-fusion

A'

A'

François

A''

Karim

dépôt

François écrit ses modifications

écriture

copie-modification-fusion

A'

A'

François

A''

Karim

dépôt

Karim essaye d'écrire ses modifications

écriture

copie-modification-fusion

erreur: version

pas à jour

A'

François

A' A''

Karim

Karim récupère la version modifiée

copie-modification-fusion

lecture

A'

dépôt

A'

A'

François

A*

Karim

dépôt

Karim fusionne les deux versions

copie-modification-fusion

A*

A'

François

A*

Karim

dépôt

Karim écrit le fichier fusionné

écriture

copie-modification-fusion

A*

A*

François

A*

Karim

dépôt

Les deux ont récupéré les modifications

de l'autre

lecture

copie-modification-fusion

la fusion se fait automatiquement si:

- fichier texte
et

- modification à des endroits bien distincts du fichier texte

copie-modification-fusion

utilisation de subversion

3ème partie

commandes svn

svn à l'IUT de Villetaneuse

présentation des commandes

svn import	: créer nouveau projet

svn checkout	: lire tout un projet

svn update	: lire

svn commit	: écrire

svn status	: changements?

svn add	: ajouter fichier(s)

svn rm	: enlever fichier(s)

principales

utilisation très

fréquente

« une seule fois »

import

svn import -m "commentaire" essai svn://aquanux/dupond

le serveur

svn

le répertoire

à importer

un commentaire

pour expliquer

(obligatoire!)

créer tout un projet sur le dépôt

(généralement utilisé une seule fois)

checkout

svn checkout svn://aquanux/dupond

le serveur

svn

télécharger tout un projet à partir du dépôt

(généralement utilisé une seule fois)

update / commit

class Essai

{

int taille;

...

fichier: Essai.java

class Essai

{

int taille;

...

fichier: Essai.java

serveur

dépot

(repository)

copie locale

réseau

lecture

écriture

programmeur

update

commit

svn update

[dupond@r10102 ~/projet]# svn update

U sources/Compteur.java

U sources/Personnage.java

U images/fond.png

Updated to revision 112.

[dupond@r10102 ~/projet]#

mét à jour votre copie

snv update

le répertoire courant et ses

sous-répertoires, recursivement

snv update nomfichier

mét à jour juste le fichier

snv update monrepertoire

mét à jour le répertoire,

recursivement

(valable aussi pour les autres commandes)

svn commit

[dupond@r10102 ~/projet]# svn commit -m "correction ..."

Sending source/Toto.java

Transmitting file data .

Committed revision 112.

[dupond@r10102 ~/projet]#

commentaire obligatoire

expliquant les modifications

soyez clairs!

écrit vos modifications

svn status

[dupond@r10102 ~/projet]# svn status

? sources/OutilsSon.java

M sources/Compteur.java

M images/presentation.gif

[dupond@r10102 ~/projet]#

vous informe sur les modifications que vous avez faites

? : fichier pas dans

le dépôt !!

M : fichier modifié

OutilSon.java a été crée par Dupond mais pas ajouté au dépôt

svn add

[dupond@r10102 ~/projet]# svn add documentation

A documentation

A documentation/manuel-utilisateur.sxw

A documentation/installation.txt

[dupond@r10102 ~/projet]#

ajoute de nouveaux fichiers au dépôt

svn à l'IUT de Villetaneuse

Dupond a un dépôt

interface web d'adminsitration du dépôt http://aquanux
(administration à partir de l'IUT uniquement)

Dupond crée des comptes pour chaque personne qui veut accéder à son dépôt (y compris lui-même)
(il choisit des logins et mots de passe arbitraires)

checkout du dépôt de Dupond par Durand:
svn checkout --username durand svn://aquanux/dupond
svn checkout --username durand svn://194.254.173.8/dupond

étudiant « Dupond »

depuis l'extérieur de l'IUT

les conflits

4ème partie

exemple de fusion sans conflit

exemple de conflit

gestions des conflits

fusion sans conflit

class Essai

{

int taille;

String nom;

float prix;

...

fichier Essai.java sur le dépôt

class Essai

{

int tailleXYZ;

String nom;

float prix;

...

class Essai

{

int taille;

String nom;

float prixABC;

...

modifications François

modifications Karim

fusion sans conflit

class Essai

{

int tailleXYZ;

String nom;

float prix;

...

class Essai

{

int taille;

String nom;

float prixABC;

...

modifications François

modifications Karim

modifications sur ligne(s) différentes

fusion possible

class Essai

{

int tailleXYZ;

String nom;

float prixABC;

...

lignes différentes

fusion

exemples de conflits

class Essai

{

int tailleXYZ;

String nom;

float prix;

...

class Essai

{

int taille123;

String nom;

float prix;

...

modifications François

modifications Karim

!

class Essai

{

int tailleXYZ;

String nom;

float prix;

...

class Essai

{

float taille;

String nom;

float prix;

...

modifications François

modifications Karim

!

même endroit

même ligne

en cas de conflit

class Essai

{

<<<<<<< .mine

int tailleXYZ;

=======

int tailleABC;

>>>>>>> .r125

String nom;

...

trois fichiers crées:

mes modifs

les modifs du dépôt

(version no.125)

Essai.java.r124

Essai.java.r125

Essai.java.mine

ma version

version avant

mes modifs

version du dépôt

résolution de conflit

éditer le fichier Essai.java en rectifiant

effacer les trois fichiers crées

commiter

commentaires clairs lors du commit

commit régulièrement : ne laissez pas s'accumuler les changements!

utilisez svn pour toutes les manipulations de fichiers
(svn cp , svn move, ...)

conseils

ce document est distribué librement :

sous licence GNU FDL :
http://www.gnu.org/copyleft/fdl.html

les originaux sont disponibles aux formats OpenOffice et powerpoint
http://www-info.iutv.univ-paris13.fr/~bosc

2005-06-30T13:49:20