-Techniques de Développement - Contrôle de Sources 1 Le Contrôle de Sources...

Preview:

Citation preview

-Techniques de Développement - Contrôle de Sources

1

Le Contrôle de Sources

marc.christie@lina.univ-nantes.fr

-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)