subversion, un outil de gestion de version

21
Subversion, un outil de gestion de version Florent Guilleux

Upload: dieter-santana

Post on 03-Jan-2016

53 views

Category:

Documents


4 download

DESCRIPTION

Florent Guilleux. Subversion, un outil de gestion de version. Le développement de logiciel est une tâche complexe. Mode de développement ouvert : contributeurs extérieurs relations à distance (mail, IRC, etc.) Gestion des diffusions (releases, correctifs de sécurité, etc.) - PowerPoint PPT Presentation

TRANSCRIPT

Subversion, un outil de gestion de version

Florent Guilleux

2 / 66

Le développement de logiciel est une tâche complexe

• Mode de développement ouvert :– contributeurs extérieurs– relations à distance (mail, IRC, etc.)

• Gestion des diffusions (releases, correctifs de sécurité, etc.)

• Dépendances multiples (bibliothèques)

• …

3 / 66

Le versionning apporte de nombreux gains

• Retours en arrière et corrections toujours possibles

• Historique de toutes les opérations

• Indispensable pour le travail en équipe

• Travaux en parallèle sur plusieurs branches

• Pour du code mais aussi un site web, de la doc…

4 / 66

… qui justifient l’effort de prise en main

commit

tag branches

repository

HEAD

BASE update

version

check out

modules

merge

conflict

diff

patchtrunk

5 / 66

Un référentiel central et une copie de travail

Référentiel

Copie de travail d’Alice

svn checkout svn commit svn commit

1 2 3

alice$work > svn co http://subversion.example.com/myProject/trunk myProject

alice$work > svn commit myProject

alice$work > svn commit myProject/file1.pl

trunk/

6 / 66

Que faut-il enregistrer dans un référentiel ?

• tout ce qui peut est susceptible de changer au cours du temps– le code

– + ce qui sert au déploiement de l’appli (scripts d’installation par exemple)

– la documentation du produit

• sauf ce qui peut être généré automatiquement (JavaDoc par exemple)

7 / 66

Quand faut-il faire des commit ?

• Souvent

• Après avoir testé et validé ses modifications

• En groupant dans un commit les modifications qui correspondent à une même fonctionnalité

8 / 66

Récupérer n’importe quelle révision : svn checkout

alice$work > svn co –r 2 http://subversion.example.com/myProject myProjectA myProject/trunk/file1.plA myProject/trunk/file2.plCheckout revision 2.

• Par un numéro de révision

alice$work > svn co –r {2006-01-15} http://subversion.example.com/myProjectA myProject/trunk/file1.plA myProject/trunk/file2.plCheckout revision 1.

• Par une date

• Mettre à jour une copie locale : svn updatealice$work > svn update myProjectU myProject/file1.plU myProject/file2.plUpdated to revision 3.

9 / 66

Connaître l’origine de sa copie locale : svn info

alice$work > svn info myProjectPath: myProjectURL: http://subversion.example.com/myProject/trunkRepository UUID: d6959e13-b0o4-0673-7u654-a2v3e0b6c323Revision: 2Node Kind: directorySchedule: normalLast Changed Author: aliceLast Changed Rev: 2Last Changed Date: 2006-02-14 12:07:15 […]

10 / 66

Les autres opérations sur le référentiel

svn add, copy, delete, moveRéférentiel

Copie de travail d’Alice

svn checkout svn addsvn commit

3 4

alice$work > svn add file3.pl alice$work > svn commit file3.pl

alice$work > svn delete file2.pl

trunk/

11 / 66

Connaître l’état de sa copie locale : svn statusRéférentiel

3

Copie de travail d’Alice

svn checkout

1

2

3

trunk/

svn delete svn add

4

1

4

5

alice$work > svn status myProjectM myProject/file1.plD + myProject/file2.plA + myProject/file4.pl? myProject/file5.pl! myProject/file3.pl

12 / 66

Les messages de journal (logs)

• A chaque commit est associé un message de journal

alice$work > svn commit –m ‘chgt de $regexp’ myProject/file1.pl

• Le message doit indiquer pourquoi cette modification a été appliquée

-m ‘Désormais on whitelist le format des paramètres CGI’

13 / 66

Connaître l’historique des modifications : svn log

alice$work > svn log myProject/file1.pl------------------------------------------------------r3 | Alice | 2006-03-09 16:43:22 (Thu, 9 Mar 2006)Ajout de la gestion des sessions------------------------------------------------------r2 | Alice | 2006-02-01 09:34:12 (Wed, 01 Feb 2006)Désormais on whitelist le format des paramètres CGI------------------------------------------------------r1 | Alice | 2006-01-10 09:34:12 (Tue, 10 Jan 2006)Import initial

alice$work > svn log –r 2 –v myProject/file1.pl------------------------------------------------------r2 | Alice | 2006-02-01 09:34:12 (Wed, 01 Feb 2006)Changed paths:

M myProject/file1.plM myProject/file2.pl

Désormais on whitelist le format des paramètres CGI------------------------------------------------------

14 / 66

Connaître les modifications : svn diff

EmailJean [email protected]

AdressesJean [email protected] [email protected]

Contacts.txt Contacts.txt (copie de travail)1

svn diff Contacts.txtIndex: Contacts.txt================--- Contacts.txt (revision 1)+++ Contacts.txt (working copy)@@ -1,2 +1,3 @@- Email+ Adresses Jean [email protected]+ David [email protected]

alice$myProject > svn diff –r X:Y file1.pl

15 / 66

Annuler des modifications dans la copie de travail

Référentiel

Copie de travail d’Alice

svn checkout svn commit

1 2

alice$work > svn revert myProject/File1.plReverted ‘File1.pl’

trunk/

svn revert

16 / 66

Des conflits peuvent survenir

Référentiel

svn checkout svn commit

1 2

Copie de travail d’Alice

Copie de travail de

Bobsvn checkout svn commit

trunk/

17 / 66

Résolution des conflits

Référentiel

svn checkout svn commit

1 2

Copie de travail d’Alice

Copie de travail de

Bobsvn checkout

svn commit

bob$myProject > svn commit File1.plSending File1.plsvn: commit failed (details follow):svn: Out of date: ‘/myProject/File1.pl’ in transaction ‘4’

svn update

bob$myProject > svn update File1.plG File1.plUpdated to revision 2

trunk/

18 / 66

Si les modifications concernent des lignes différentes

UnDeuxTroisQuatre

ZéroUnDeuxTroisQuatre

UnDeuxTroisQUATRE

ZéroUnDeuxTroisQUATRE

svn update

État « merGed » : G

ZéroUnDeuxTroisQUATRE

svn commit

Bob

Alice

19 / 66

Si les modifications concernent les mêmes lignes

UnDeuxTroisQuatre

UnTwoTroisQuatre

UnDosTroisQUATRE

Un<<<< .mineTwo====Dos>>>> .r2DeuxTroisQUATRE

svn update

État « Conflict » : C

File1.pl

• File1.pl.mine

• File1.pl.r2

• File1.pl.r1

20 / 66

Si les modifications concernent les mêmes lignes

Un<<<< .mineTwo====Dos>>>> .r2TroisQUATRE

État « Conflict » : C

UnTwoTroisQUATRE

résolution manuelle

UnTwoTroisQUATRE

svn resolved

UnTwoTroisQUATRE

svn commit

21 / 66

Cycle de travail typique1. Mettre à jour sa copie de travail

svn update

2. Apporter des modificationssvn add / copy / delete / move

3. Visualiser les modificationssvn status / diff / revert

4. Fusionner les modifications svn merge / resolved

5. Enregistrer ses modificationssvn commit