21
Subversion, un outil de gestion de version Florent Guilleux

Subversion, un outil de gestion de version

Embed Size (px)

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

Citation preview

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