CVS - IRISA · 2005-10-12 · 1 CVS Gestionnaire de versions concurrentes 08/01/2004 Didier...

Preview:

Citation preview

1

CVS

Gestionnaire de versions concurrentes

08/01/2004 Didier Vojtisek

2

PlanSurvol des fonctionnalités de CVSUtilisation

– Gestion de versions– Gestion de la concurrence

Utilisation avancée– Branches– Gestion de la base– Macro expansion– Alertes

Conclusion

2

3

Outils existantsClearCaseContinuusPVCS Visual SourceSafeCVS : Concurrent Versions System…

4

CVS pourquoi faire ?Travailler à plusieurs sur les mêmes fichiers en même temps (concurrence)Gérer les versions des sources d’un développement

– Tags symboliques– Comparaisons entre versions– Multiple lignes de développement dans une seule

base– Gestion des branches de développement– Support configurable pour les log– Support pour les fichiers binaires– Envois d’évènements

3

5

Ce que CVS ne fait pasSystème de constructionSuivi de bugsSuivi de dépendancesProcédure de testGestion de la documentation du code

6

DisponibilitéLogiciel libre disponible pour toute plate-formeClient en ligne de commandePlusieurs clients graphiques

– WinCVS, tkCVS, jCVS, WebCvs, Jalindi igloo, TortoiseCVS …

Clients intégrés à des outils– Eclipse, …

Un serveur dédié à l ’Irisa (sur le modèle de celui de Sofia) (en fait ssh)

4

7

Architecture3 modes:

Répertoire partagé

Serveur cvs

Clients CVS

Local

Client/serveur

Répertoire partagé

Clients CVS

Distant

shell

8

La base CVS

serveurcvs:/data1/basecvs

CVSROOT shr project1 project2 project3 devkits

ar cgi doc install reports util web

cgipr

• Réside sur un serveur• Pas de fichier de travail dans la base

esapps formsunix nt

5

9

Plan Survol des fonctionnalités de CVSUtilisation

– Gestion de versions– Gestion de la concurrence

Utilisation avancée– Branches– Gestion de la base– Macro expansion– Alertes

Conclusion

10

Modèle d’utilisationCheckout, Commit, Update

CheckoutCrée une copie privée dans un répertoire de travail. copies multiples, version multiples possibles.

CommitValide les changements d’une copie de travail pour les ajouter à la base. La copie de travail doit être à jour avec la base

UpdateMet à jour une copie de travail à partir de la version dans la base

6

11

Révision et tagRévision

– Numéro qui s’incrémente à chaque changement validé dans la base.

Tag (étiquette)– Pour marquer des étapes où l’on souhaite

pouvoir revenir ultérieurement– Pour marquer une version distribuée.

Remarque :– Les numéros de révisions ne sont pas liés

aux versions du logiciel.

12

Checkout concurrentsBase CVS

toto.c

Copie de travailV1.7

Copie de travail V1.1

Copie de travail V1.2

Copie de travailV1.7

Copie de travail

V1.2.2.1

checkout branche rel_1_fixcheckout la

test

checkout latest

checkoutV1.2

checkoutV1.1Pierre

Paul BrigittePatrick

Le checkout ne bloque pas le fichier dans la base

X XV1.8 or 1.9

V1.8 or 1.9V1.2.2.2

checkincheckin

checkin

checkin interdit

Jacques

7

13

checkout

Développement idéal (1/4)

base

Développeur A

Développeur B

14

développement

Développement idéal (2/4)

base

Développeur A

Développeur B

8

15

checkin

Développement idéal (3/4)

base

Développeur A

Développeur B

16

update

Développement idéal (4/4)

base

Développeur A

Développeur B

9

17

checkin

Développement réel (1/5)

base

Développeur A

Développeur B

18

checkin

X

Développement réel (2/5)

base

Développeur A

Développeur B

10

19

Développement réel (3/5)

base

Développeur A

Développeur B

update

conflit

20

Développement réel (4/5)

base

Développeur A

Développeur B

Résolution du conflit

11

21

Développement réel (5/5)

base

Développeur A

Développeur B

checkin

22

Synchronisation avec update (1/2)

(?) unknown : le fichier n ’est pas connu dans CVS. Utiliser cvs add.(A)dded : l ’utilisateur a ajouté un nouveau fichier mais il n ’est pas encore rendu public (commit)(U)pdated : le fichier n ’existait pas dans la copie de travail ou n ’avait pas été modifié localement. La nouvelle version remplace l ’ancienne.(R)emoved : Le fichier a été supprimé de la base, il est détruit de la copie locale.(M)odified : le fichier a été modifié localement, mais il n ’a pas encore été rendu public

12

23

Synchronisation avec update (2/2)

(M) erged : Le fichier a été modifié par un autre utilisateur mais aussi localement. Cependant CVS a réussi à effectuer une fusion sans conflit. Une copie de sauvegarde est créée dans la copie privée.(C) onflict : Le fichier a été modifié par un autre utilisateur mais aussi localement. CVS a détecté un conflit lors de la fusion. Une copie de sauvegarde est créée.

24

Résolution d’un conflitCommande " diff "Outils graphiques montrant les deux versions.

Eviter les conflits :– penser à faire un update régulièrement– Chaque intervenant doit travailler sur

des domaines fonctionnels séparés.– Communiquer

13

25

Concurrence sur des fichiers non texte

Pas de diff disponible, les conflits sont à éviter à tout prix !Dans ce cas, CVS sert surtout pour l'historique.Une solution si les accès concurrents sont absolument nécessaires:

– Utiliser une copie locale dans un répertoire d'équipe et laisser gérer le problème de concurrence par l'outil qui ouvre le fichier

– Nécessite de bien informer les utilisateurs sur les zones qu'ils peuvent manipuler depuis leur copie locale et depuis la copie locale d'équipe.

26

Commandes habituellescvs [cvs-options] command [cmd-options] [fichiers]cvs init Initialise une nouvelle base.cvs checkout Récupère des fichiers pour édition.cvs commit Valide les modifications vers la basecvs update Met à jour la copie locale avec la base.cvs add Ajoute des fichiers/répertoires dans la

base.cvs remove Supprime un élément dans la base.cvs tag Labellise les sources.cvs status Montre le status des fichiers locaux.cvs log Affiche l’historique des révisions.cvs diff Compare les fichiers de la copie de travail

avec les versions de la base.

14

27

Suppression / RenommageSuppressionrépertoire sur la base : Attic (grenier)

RenommageIl n’existe pas de mécanisme spécifique=> delete + add (discontinuité de

l ’historique)

28

ModulesArborescence de répertoiresParties visibles si l’on se connecte à distance sur un système inconnuUtilisé en particulier par certaines interfaces graphiquesComposition de modules possible

– Alias : traite plusieurs modules comme un seul module

– Inclusion d’un module dans un autre– Exclusion– …

15

29

PlanSurvol des fonctionnalités de CVSUtilisation

– Gestion de versions– Gestion de la concurrence

Utilisation avancée– Branches– Gestion de la base– Macro expansion– Alertes

Conclusion

30

Branches (1/2)

1.1

1.2

1.3

1.4

1.2.4.1 1.2.2.1

1.2.2.2

1.2.2.3

1.2.2.4

1.2.2.2.2.1

• correction urgente d'un bug sur une version livrée

• commit et update sans troubler la branche principale

16

31

Branches (2/2)

Toujours planifier de joindre ou d’abandonner une branche (utilisation de la fusion de CVS)A utiliser avec précaution …– La jonction de branches pose pas mal

de problèmes, en particulier lors de branches multiples

32

Gérer une baseChoisir son emplacementGérer les modulesDéfinir les politiques d’utilisation– Actions spécifiques lors d’évènements

(généralement un envoi de mail)– Watch/edit

17

33

Configurer une baseModule spécial CVSROOT

CVS checkout CVSROOT

Différents fichiers de configuration– modules, définitions des modules dans la

base– cvswrapper aide à gérer le problème des

fichiers binaires– cvsignore indique les fichiers que CVS doit

ignorer (*.o, …)– commitinfo, editinfo, loginfo, notify, rcsinfo,

taginfo, permettent de configurer des actions suivant les opérations effectuées

34

Mode de stockage standardBasé sur RCSFichiers textes par défautUtilisation de la commande diffStockage des différences entre 2 versions successives.

18

35

Problème Unix/DosSpécificité de l’Inria : travail en environnements multiples

Serveur cvs (unix)

Utilisateur unix

Utilisateur Dos

Utilisateur Unix + Dos via un répertoire partagé

36

Unix/DosTexte initial (Dos) :

Mon texte {CR}{NL}

Import avec un client DosTexte sur le serveur (Unix) :

Mon texte {NL}

Export à partir d’une stationTexte obtenu (Unix) :

Mon texte {NL}

Expansion des fins de lignes en fonction du client

Reconnaissance des fins de ligne

Cas Normal

19

37

Exemple de problème Unix/DosTexte initial (Dos) :

Mon texte {CR}{NL}

Import à partir d’une station UnixTexte sur le serveur (Unix) :

Mon texte {CR}{NL}

Export à partir d’un PCTexte obtenu ( ??? ) :

Mon texte {CR}{CR}{NL}

Expansion des fins de lignes en fonction du client

38

SolutionCréer des copies de travail pour chaque type de système d’exploitation Toujours utiliser le client CVS du système qui va manipuler les fichiers.

20

39

Macro expansionMots clés à insérer dans les sources– $Author$– $Date$– $Revision$– $Id$– $log$– …

40

Exemple de macro expansionpour un script shell ou un Makefile.

# $Id: makefile,v 1.2 2002/01/23 09:21:33 auser Exp $

# $Log: makefile,v $# Revision 1.2 2002/01/23 09:21:33 auser# Correction d'une typo dans le makefile.## Revision 1.1 2002/01/01 10:55:30 anotheruser# Version initiale#

21

41

Attention aux macro expansion

À utiliser généralement dans une partie en « commentaire »$Log$ copie le début de ligne en supposant que c’est la mise en commentaireAttention aux fichiers dont le format est inconnu

Solution:– désactiver l’expansion –ko– le passer en tant que fichier binaire -kb

42

Edit/WatchAjout au fonctionnement standard– Les fichiers sont récupérés en lecture

seule. Il faut utiliser la commande editpour faire des modifications

– on peut configurer CVS pour que chaque modification envoie un mail

pratique pour les parties de projet évoluant peu.Etant donné que la notification passe par

mail, cela peut être gênant pour un gros projet.

22

43

Advisory locksDéveloppeur A

Développeur B

Serveur CVSedit/watch

Editors:

Développeur A

Développeur B

Editors:

Développeur Aedit

Alerte email

44

Création de la baseImport

– Attention les fichiers qui ont servi à initialiser un module ne sont pas connecté à la base CVS !

– => Procédure Import des fichiersRenommage des originaux CheckoutSupprimer les originaux (après vérification)Pour enfin travailler …

23

45

Choix du mode de connexion

locale à l'Irisapar remote shellmode distantde l'extérieur vers l'Irisapar remote shell sécurisé

par remote shell sécurisé sur la machine lievre

pas d'utilisation à l'Irisamode serveur

de l'extérieur vers l'Irisa, sans compte à l'Irisa

locale à l'Irisa!!! Problèmes potentiels sous win32

mode local (accès fichier)UtilisationMode

Mode distant recommandé– Autorise l'envoi de mail– rsh peu contraignant

46

rsh sous windows

Simplement ajouter votre machine dans votre .rhostsPréférer le rsh de cygwin

24

47

CVS et EclipseUn vue supplémentaire (gestion des serveurs et fenêtre de synchronisation), des menus contextuelsMethode de connection :

– ext pour rsh ou ssh– extssh pour ssh mais

sauvegarde du mot de passe dans eclipse

48

Derniers conseilsCVS n ’est qu’un outil de gestion de versions, il ne dispense pas d ’un bonne organisation du projet et du développementNe pas attendre trop longtemps pour se resynchroniserquelques idées :

– noter la version des outils utilisés (historique ou fichier spécial)

– avoir en permanence une version extraite en lecture seule (éventuellement compilée) utile pour la consultation des documentations, tests de non régression, ...

25

49

Aller plus loinPage de l'irisa

– http://www-interne.irisa.fr/atelier/documentations/ASCII/logiciels/CVS.html

Général– www.cvshome.org– www.loria.fr/~molli/cvs-index.html

GUI– www.twobarleycorns.net/tkcvs.html– www.wincvs.org/– www.jalindi.com/igloo– www.jcvs.org

50

Questions/réponses

Recommended