Upload
dieter-santana
View
50
Download
4
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
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