32
-Techniques de Déve loppement - Contrôl 1 Le Contrôle de Sources [email protected]

-Techniques de Développement - Contrôle de Sources 1 Le Contrôle de Sources [email protected]

Embed Size (px)

Citation preview

Page 1: -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

1

Le Contrôle de Sources

[email protected]

Page 2: -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

Page 3: -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

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

Page 4: -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

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

Page 5: -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

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

Page 6: -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

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

Page 7: -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

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

Page 8: -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

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

Page 9: -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

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

Page 10: -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

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

Page 11: -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

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

Page 12: -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

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

Page 13: -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

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

Page 14: -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

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

Page 15: -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

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

Page 16: -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

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

Page 17: -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

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

Page 18: -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

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)

Page 19: -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

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

Page 20: -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

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

Page 21: -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

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

Page 22: -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

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

Page 23: -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

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

Page 24: -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

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

Page 25: -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

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

Page 26: -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

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

Page 27: -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

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

Page 28: -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

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

Page 29: -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

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)

Page 30: -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

30

Quelques Interfaces

WinCVS

Page 31: -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

31

Quelques interfaces

Cervisia

Page 32: -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

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)