Upload
cupidon-roger
View
106
Download
0
Embed Size (px)
Citation preview
-Techniques de Développement - Contrôle de Sources
2
Introduction
Contrôle de sources : au + simple :
sauvegarde et restauration des données beaucoup + puissant
enregistrer toutes les modifications successives récupérer un ancienne version maintenir de différentes versions en cours partager le développement entre plusieurs personnes
Outils de contrôle de sources RCS, SCCS, CVS
-Techniques de Développement - Contrôle de Sources
3
Le contrôle de sources
Destiné à toutes les tâches où des changements fréquents interviennent sur des fichiers
Développement Sources de programmes Fichiers de configuration Scripts d’installation/désinstallation
Administration système Gestion des utilisateurs Gestion des connections ( routeurs,DNS, passerelles)
Rapports et documentations Rapports techniques Manuel utilisateur Documentation de logiciel
Taches où un retour en arrière est nécessaire
-Techniques de Développement - Contrôle de Sources
4
Le contrôle de sources
Quels fichiers placer sous contrôle ? Les fichiers sources Les fichiers auxquels des modifications régulières sont apportées (docs,
manuel utilisateur) Les fichiers qui permettent de reconstruire une version antérieure du
produit
Quels fichiers ne pas placer sous contrôle ? Fichiers dérivés (ie que l’on peut reconstruire à partir des sources)
Fichiers objet, fichiers exécutables Fichiers générés par lex et yacc fichiers temporaraires
Fichiers binaires en général
Il faut pouvoir reconstruire une version précédente du logiciel
-Techniques de Développement - Contrôle de Sources
5
Cycle d’un fichier source
L’idée derrière le CS est le versioning : enregistrer une version spécifique d’un fichier pour la récupérer ultérieurement
Obtenir une version Modifications
Tests
Créer une nouvelle version
-Techniques de Développement - Contrôle de Sources
6
Objectifs du CS
Sauver une version spécifique d’un fichier (appelé révision) dans une archive Récupérer une révision précédente du fichier Modifier une révision précédente d’un fichier sans changer les révisions en
cours Enregistrer un texte explicatif des changements Permettre un accès contrôlé aux archives Partager et coordonner le développement entre plusieurs personnes Avoir des branches de développement (plusieurs versions différentes d’un même
fichier pour du développement en parallèle) Maintenir le développement de différentes distributions (releases) Ajouter des extensions (plug-ins) Maintenir des versions pour des plate-formes/environnements différents
-Techniques de Développement - Contrôle de Sources
7
Les opérations du contrôle de sources
Création de l’archiveCréation de l’archive
Obtention du fichier (lecture seule)
Obtention du fichier (lecture seule)
Obtention du fichier (lecture écriture)
Obtention du fichier (lecture écriture)
Historique des modifications
Historique des modifications
Comparaison du fichier et de l’archive
Comparaison du fichier et de l’archive
Changements
Ajout des modifications à l’archive
Ajout des modifications à l’archive
Archive crééeArchive créée
Archive modifiéeArchive modifiée
non
oui
-Techniques de Développement - Contrôle de Sources
8
Terminologie
Révision : fichier source archivé. A chaque révision est associé un identifiant sous la forme m.n
m : révision majeure n : révision mineure
La première révision d’un fichier est 1.1, la deuxième 1.2 etc. Archive : fichier qui contient toutes les modification d’un fichier source
et des informations administratives Référentiel : structure où sont stockées les archives Distribution : ensemble de fichiers auxquels sont associés un nom
symbolique
-Techniques de Développement - Contrôle de Sources
9
RCS – Revision Control System
Outil basique destiné au contrôle de sources, développé au début des années 80 par W. F. Tichy, il est plus simple et plus convivial que l’outil SCCS (Source Code Control System)
Un répertoire RCS par répertoire de travail contient le référentiel Un fichier archive contient
L’ensemble des modifications apportées au fichier Log des modifications Informations administratives
droits d’accès noms symboliques numéro de révision
-Techniques de Développement - Contrôle de Sources
10
RCS-Créer une archive
La commande ci (check-in) place un fichier dans le référentiel> ci toto.c
Crée une archive nommée toto.c,v Demande un texte de description (log) Efface le fichier toto.c
Tous les fichiers sources doivent être placés dans le référentiel
>ci toto.cRCS/toto.c,v <-- toto.center description, terminated with single '.' or end of file:NOTE: This is NOT the log message!>> fonctions de base de la structure coord2D>> .initial revision: 1.1done
-Techniques de Développement - Contrôle de Sources
11
RCS-Obtenir une révision
Commande co (Check-out)
> co toto.cCrée le fichier toto.c à partir de la dernière révision de l’archive toto.c,v (avec
accès en lecture seule). La commande suivante récupère une révision donnée d’un fichier
> co –r1.6 toto.c
Commande co –l Accès en écriture (lock)
> co –l toto.c Permet de bloquer par un verrou toute autre modification sur ce fichier, en attendant
une révision ultérieure Vous n’avez pas accès à ce fichier si une autre personne est en train de modifier une
révision de ce fichier
-Techniques de Développement - Contrôle de Sources
12
RCS-Comparer des révisions
Commande rcsdiff Comparer le fichier de travail à une révision donnée
> rcsdiff –r1.6 toto.c Comparer deux révisions
> rcsdiff –r1.6 –r1.4.2.1 toto.c Exemple :
RCS file: RCS/toto.c,v
retrieving revision 1.6
diff -r1.6 toto.c
40c40
< void somme(coord2D a, coord2D b, coord2D *c) {
---
> void plus(coord2D a, coord2D b, coord2D *c) {
-Techniques de Développement - Contrôle de Sources
13
RCS-Mettre à jour une archive
Commande ci (check-in)
> ci toto.c Ajoute les modifications de ce fichier à l’archive existante Incrémente le numéro de révision Demande un log
Forcer le numéro de révision (e.g. pour une révision majeure)
> ci –r2.0 toto.c
Seulement si vous êtes satisfait de votre fichier (compilation correcte) et que vous voulez le sauver pour y accéder plus tard
RCS/toto.c,v <-- toto.c
new revision: 2.0; previous revision: 1.2
enter log message, terminated with single '.' or end of file:
>> erreur lors du calcul de somme
>> .
done
-Techniques de Développement - Contrôle de Sources
14
RCS-Historique
Commande rlog
> rlog toto.c Historique des modifications sur un fichier Informations administratives sur le fichier
Exemple :
RCS file: RCS/toto.c,v
Working file: toto.c
head: 1.2
branch:RCS file: RCS/toto.c,v
Working file: toto.c
head: 1.2
branch:
locks: strict
access list:
symbolic names:
keyword substitution: kv
total revisions: 2; selected revisions: 2
description:
fonctions de base de la structure coord2D
----------------------------
revision 1.2
date: 2001/10/30 15:52:46; author: marco; state: Exp; lines: +3 -2
erreur lors du calcul de somme
----------------------------
revision 1.1
date: 2001/10/30 15:50:13; author: marco; state: Exp;
Initial revision
-Techniques de Développement - Contrôle de Sources
15
Construire une distribution
Nécessité de partager des versions avec d’autres personnes, en interne ou en externe (étape essentielle dans un processus de développement)
Prendre un instantané de votre projet (ensemble des sources) pour distribuer le projet. On parle de distribution (release)
Techniquement on regroupe l’ensemble des fichiers sous un nom symbolique
Release1_0
Makefile v1.3
toto.c v1.8
main.c v1.14
titi.c v1.2
Release2_0
Makefile v1.3
toto.c v2.3
main.c v1.25
titi.c v1.5
-Techniques de Développement - Contrôle de Sources
16
RCS-Construire une distribution
La commande rcs –n associe le nom symbolique Release1_0 à la révision 1.5 du fichier toto.c
> rcs –nRelease1_0:1.5 toto.c Pour créer une distribution, il faut associer le même nom à tous les fichiers du
projet. La commande suivante associe le nom Release1_0 à la dernière révision du
fichier toto.c
> rcs –nRelease1_0: toto.c On peut ensuite récupérer un fichier de cette distribution
> co –l –rRelease1_0 toto.c
-Techniques de Développement - Contrôle de Sources
17
Versions Multiples
Exemple
1.1
1.2
1.3
1.4
1.5
1.6
2.0
2.1
Release 1.0
Release 1.2
Release 2.0
-Techniques de Développement - Contrôle de Sources
18
Notion de branches de développement
Il existe toujours une branche de développement par défaut (c’est sur cette branche que se font les Check-in et Check-out)
Pour maintenir différentes versions du produit, il est indispensable de créer des branches de développement
Permet le développement de différentes distributions (releases) Permet la maintenance de différentes distributions (patchs) Permet l’ajout d’extensions (plug-ins) Permet le développement et la maintenance de distributions pour des
plate-formes/environnements différents (Unix/Irix/Linux/FreeBSD, Windows,BeOS)
-Techniques de Développement - Contrôle de Sources
19
Branches de développement (exemple)
1.1
1.2
1.3
1.4
1.5
1.3.1.1
1.3.1.2
1.6
1.6.1.1 2.0
2.1
Release 1.0
Release 1.2
Release 2.0
-Techniques de Développement - Contrôle de Sources
20
RCS-Création d’une branche de développement
Créer une révision sur un fichier qui n’est pas la dernière révision Récupérer une ancienne révision d’un fichier
> co -l –r1.2 toto.c Faire une modification et mettre à jour l’archive
> ci toto.c Ou forcer une révision en utilisant la commande ci –r
Crée une révision 1.2.1.1 sur une nouvelle branche 1.2.1
> ci –r1.2.1 toto.c Crée une révision sur une nouvelle branche à partir de la dernière
révision mineure du fichier toto.c
> ci –r1 toto.c
-Techniques de Développement - Contrôle de Sources
21
Norme de numérotation des branches de distribution
Release Majeur : n.0 Introduit de nouvelles fonctionnalités incompatibles avec les anciennes Introduit des changements de fonctionnalités incompatibles avec les
anciennes
Release Mineur : n.m Introduit quelques nouvelles fonctionnalités Doit rester compatible avec l’ancienne version
Mise à jour : n.m.u Répare les bugs de la version précédente N’introduit pas de nouvelles fonctionnalités
-Techniques de Développement - Contrôle de Sources
22
Norme de dénomination des branches de distribution
beta0_m distribution beta 0.mbeta0_m_head tête de développement de la distribution beta 0.mbeta0_m_u distribution beta 0.m.ubeta0_m_u_head tête de développement de la distribution beta 0.m.uhead tête de développement de la branche par défautreln_0 distribution n.0reln_0_pp patch p sur la distribution n.0reln_0_head tête de développement de la distribution n.0reln_m distribution n.mreln_m_pp patch p sur la distribution n.mreln_m_head tête de développement de la distribution n.mreln_m_u distribution n.m.ureln_m_u_pp patch p sur la distribution n.m.ureln_m_u_head tête de développement de la distribution n.m.u
-Techniques de Développement - Contrôle de Sources
23
RCS-Maintenance d’une branche de développement
1.1
1.2
1.3
1.4
1.5
1.3.1.1
1.3.1.2
1.6
1.6.1.1 2.0
2.1
Rel1_0
Rel1_2
Rel2_0
Rel1_0_p1
Rel1_2_p1
2.1
Rel1_0_head
Rel1_2_head
-Techniques de Développement - Contrôle de Sources
24
RCS-Maintenance d’une branche de développement
Pour maintenir les différentes distributions, il faut toujours un symbole qui représente la tête de la branche de développement (head). On peut associer plusieurs symboles à un fichier :
> rcs –nRel1_0:1.3.1.1 -nRel1_0_head:1.3.1.1 toto.c
Cependant, rcs génère une erreur si on tente de réutiliser le même symbole avec une révision différente :
> rcs -nRel1_0_head:1.3.1.2 toto.c
On utilise alors l’option –N pour assigner le symbole à cette révision et effacer les autres utilisations de ce symbole.
> rcs -NRel1_0_head:1.3.1.2 toto.c
Permet de toujours conserver un symbole unique pour la tête de la branche de développement
-Techniques de Développement - Contrôle de Sources
25
Opérations entre les branches de développement
« Comparer » deux branches> rcsdiff –r1.4 –r1.3.1.3 toto.c
« Merger » ensemble deux branchesAppliquer les changements d’une branche secondaire vers la branche principale Appliquer les changements entre deux branches
RCS file: RCS/toto.c,vretrieving revision 1.4retrieving revision 1.3.1.3diff -r1.4 –r1.3.1.3 toto.c40c40< void somme(coord2D a, coord2D b, coord2D *c) {--->void plus(coord2D a, coord2D b, coord2D *c) { …
-Techniques de Développement - Contrôle de Sources
26
RCS-Merge
1.4
1.7
1.4.1.1 1.6
Rel1_0
> co –l toto.c> rcsmerge –r1.4 –r1.4.1.1 toto.c
-Techniques de Développement - Contrôle de Sources
27
RCS-merge (conflits)
Attention aux conflits !
RCS file: RCS/toto.c,v
retrieving revision 1.1.1.1
retrieving revision 1.1
Merging differences between 1.1.1.1 and 1.1 into toto.c
rcsmerge: warning: conflicts during merge
-Techniques de Développement - Contrôle de Sources
28
RCS-merge (conflits)
<<<<<<< toto.c
coord2D *somme(coord2D a, coord2D b) {
coord2D *c = (coord2D *)(malloc(sizeof(struct coord2D)));
=======
void plus(coord2D a, coord2D b, coord2D *c) {
>>>>>>> 1.3
…
<<<<<<< toto.c
c->y = a.y - b.y;
return c;
=======
c->y = a.y + b.y;
>>>>>>> 1.3
…
<<<<<<< toto.c
coord2D *diffrence(coord2D a, coord2D b) {
coord2D *c = (coord2D *)(malloc(sizeof(struct coord2D)));
=======
void moins(coord2D a, coord2D b, coord2D *c) {
>>>>>>> 1.3
…
-Techniques de Développement - Contrôle de Sources
29
RCS-Conclusion
Outil assez basique de contrôle des sources Limité pour des projets très importants (pas
gestion des répertoires, gestion multi-utilisateur limitée)
Bonne base pour des outils plus évolués (CVS)
-Techniques de Développement - Contrôle de Sources
30
Quelques Interfaces
WinCVS
-Techniques de Développement - Contrôle de Sources
31
Quelques interfaces
Cervisia
-Techniques de Développement - Contrôle de Sources
32
Conclusion sur le CS
Permet la sauvegarde et la restitution de fichiers
Permet de conserver plusieurs versions d’un même fichier (branches de développement)
Permet de partager les sources à plusieurs (verrous)