[ précédent ] [ Table des matières ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ A ] [ suivant ]


Guide de référence pour Debian
Chapitre 12 - Systèmes de contrôle de version


12.1 Concurrent Versions System (CVS)

Consultez /usr/share/doc/cvs/html-cvsclient, /usr/share/doc/cvs/html-info, /usr/share/doc/cvsbook avec lynx ou lancez info cvs et man cvs pour de l'information détaillée.


12.1.1 Installation d'un serveur CVS

La configuration suivante autorise un enregistrement sur le dépôt CVS seulement par un membre du groupe « src », et l'administration de cvs seulement par un membre du groupe « staff », ceci afin de réduire les risques de conflits.

     # cd /var/lib; umask 002; mkdir cvs # [Woody] FSH
     # apt-get install cvs cvs-doc cvsbook
     # export CVSROOT=/var/lib/cvs
     # cd $CVSROOT
     # chown root:src .  # utiliser « staff » pour restreindre plus
                           pour un projet débutant      
     # chmod 3775 .      # si la ligne précédente utilise « staff »,
                           alors régler sur 2775
     # cvs -d /var/lib/cvs init # il est plus prudent de spécifier
                                             -d explicitement ici !
     # cd CVSROOT
     # chown -R root:staff .
     # chmod 2775 .
     # touch val-tags 
     # chmod 664 history val-tags
     # chown root:src history val-tags

12.1.2 Exemples de sessions CVS

Ce qui suit configure les environnements de shell pour l'accès au dépôt CVS.


12.1.2.1 CVS anonyme (téléchargement seulement)

Accès distant en lecture seule :

     $ export CVSROOT=:pserver:anonymous@cvs.sf.net:/cvsroot/qref
     $ cvs login
     $ cvs -z3 co qref

12.1.2.2 Utilisation d'un serveur CVS local

Accès local depuuis un shell sur la même machine :

     $ export CVSROOT=/var/lib/cvs

12.1.2.3 Utilisation d'un pserver CVS distant

Accès distant sans SSH (utilise le protocole RSH de cvs) :

     $ export CVSROOT=:pserver:account@cvs.foobar.com:/var/lib/cvs
     $ cvs login

Cela peut être sujet à des attaques d'écoute de ligne.


12.1.2.4 Utilisation d'un CVS distant avec ssh

Accès distant avec SSH :

     $ export CVSROOT=:ext:account@cvs.foobar.com:/var/lib/cvs

ou pour SourceForge :

     $ export CVSROOT=:ext:account@cvs.sf.net:/cvsroot/qref

Vous pouvez aussi utiliser l'authentification RSA (Se connecter avec moins de mots de passe – RSA, Section 9.5.3), qui élimine la demande du mot de passe.


12.1.2.5 Créer une nouvelle archive CVS

Pour,

     OBJET               VALEUR           SIGNIFICATION
     Arbre source :      ~/project-x       Tous le code source
     Nom du Projet :     project-x         Nom pour ce projet
     Balise vendeur :    Main-branch       Balise pour la branche entière
     Balise de version : Release-original  Balise pour une version spécifique

Ensuite,

     $ cd ~/project-x                 # va dans le répertoire du source
      ... crée un arbre source ...
     $ cvs import -m "Start project-x" project-x Main-branch Release-initial
     $ cd ..; rm -R ~/project-x

12.1.2.6 Travailler avec CVS

Pour travailler avec project-x en utilisant le dépôt CVS local :

     $ cd                            # va à la zone de travail.
     $ cvs co project-x              # importe les sources du CVS en local
     $ cdproject-x 
      ... effectuez des changements au contenu ...
     $ cvs diff -u                   # similaire à diff -u repository/ local/
     $ cvs up -C modified_file       # undo changes to a file
     $ cvs ci -m "Décrire les changements"   # sauvegarde les sources locales
                                               sur CVS
     $ vi newfile_added
     $ cvs add newfile_added
     $ cvs ci -m "Ajout de newfile_added"
     $ cvs up                        # récupère la dernière version du CVS
      ... pour créer les sous-répertoires récemment ajoutés, utilisez
      ... "cvs up -d -P" à la place
      ... attention aux lignes commençant par "C filename"
      ... le code non modifié est déplacé vers `.#filename.version'
      ... rechercher "<<<<<<<" et ">>>>>>>" dans filename
     $ cvs tag Release-1             # ajoute une balise de version
     ... modifiez un peu plus ...
     $ cvs tag -d Release-1          # enlève une balise de version
     $ cvs ci -m "commentaires supplémentaires"
     $ cvs tag Release-1             # rajoute une balise de version
     $ cd                            # retourne à la zone de travail.
     $ cvs co -r Release-initial -d old project-x
     ... récupère la version originale dans le répertoire old
     $ cd old
     $ cvs tag -b Release-initial-bugfixes # création d'une branche (-b)
      ... maintenant vous pouvez travailler sur l'ancienne version (Tag=sticky)
     $ cvs update
      ... l'arbre des sources a maintenant la balise permanente
          "Release-initial-bugfixes"
      ... travaillez sur cette branche
     $ cvs up # synchronise avec les autres développeurs de la branche
     $ cvs ci -m "ajout à la branche"
     $ cvs update -kk -A
      ... enlève la balise collante et oublie le contenu
      ... met à jour depuis le tronc principal sans le remplacement des mots-clé
     $ cvs update -kk -j Release-initial-bugfixes
      ... fusionne la branche Release-initial-bugfixes avec le tronc principal
      ... sans le remplacement des mots-clé.
          Réparez les conflits avec un éditeur
     $ cvs ci -m "merge Release-initial-bugfixes"
     $ cd
     $ tar -cvzf old-project-x.tar.gz old     # crée une archive, -j pour bz2
     $ cvs release -d old     # supprimez les sources locales (optionnel)

Options utiles à se rappeler (premier argument de cvs) :

     -n      lancement sec, sans effet
     -t      message des étapes de l'activité cvs

12.1.2.7 Exportation de fichiers à partir de CVS

Pour avoir la dernière version par CVS, utiliser « tomorrow » :

     $ cvs ex -D tomorrow module_name

12.1.2.8 Administrer CVS

Ajouter un alias à un projet (serveur local) :

     $ su - admin           # un membre de l'équipe
     $ export CVSROOT=/var/lib/cvs
     $ cvs co CVSROOT/modules
     $ cd CVSROOT
     $ echo "px -a project-x" >>modules
     $ cvs ci -m "Maintenant px est un alias pour project-x"
     $ cvs release -d .
     $ exit                 # Ctrl-D pour quitter su
     $ cvs co -d project px
      ... récupère project-x (alias:px) de CVS vers le répertoire du projet
     $ cd project
      ... faites les changements de contenu ...

12.1.3 Résoudre les problèmes de CVS


12.1.3.1 Permissions de fichiers dans le dépôt

CVS ne va pas écraser le fichier du dépôt courant mais va le remplacer par un autre. Ainsi, la permission en écriture sur le répertoire de dépôt est critique. Pour chaque nouvelle création d'un dépôt, lancez ce qui suit pour vous assurer que cette condition et remplie.

     # cd /var/lib/cvs
     # chown -R root:src repository
     # chmod -R ug+rwX   repository
     # chmod    2775     repository # si besoin est, ça et les sous-répertoires

12.1.3.2 Bit d'exécution

Le bit d'exécution de fichier est conservé lorsqu'on quitte la session. Si on observe n'importe quel problème de permission d'exécution dans les fichiers de contrôle, on peut changer la permission sur ce fichier dans le dépôt CVS avec la commande suivante.

     # chmod ugo-x filename

12.1.4 Commandes CVS

Voici les commandes CVS avec leurs raccourcis.

     {add|ad|new} [-k kflag] [-m 'message'] files...
     {admin|adm|rcs} [rcs-options] files...
     {annotate|ann} [options] [files...]
     {checkout|co|get} [options] modules...
     {commit|ci|com}   [-lnR]  [-m  'log_message'  |  -f  file] \
             [-r revision] [files...]
     {diff|di|dif} [-kl] [rcsdiff_options] [[-r rev1 | -D date1] \
             [-r rev2 |  -D date2]] [files...]
     {export|ex|exp} [-flNn] -r rev|-D date [-d dir] [-k kflag] module...
     {history|hi|his} [-report] [-flags] [-options args] [files...]
     {import|im|imp} [-options] repository vendortag releasetag...
     {login|logon|lgn}
     {log|lo|rlog} [-l] rlog-options [files...]
     {rdiff|patch|pa} [-flags] [-V vn] [-r t|-D d [-r t2|-D d2]] modules...
     {release|re|rel} [-d] directories...
     {remove|rm|delete} [-lR] [files...]
     {rtag|rt|rfreeze} [-falnR]  [-b]  [-d]  [-r  tag  |  -D  date] \
              symbolic_tag modules...
     {status|st|stat} [-lR] [-v] [files...]
     {tag|ta|freeze} [-lR] [-F] [-b] [-d] [-r tag | -D date]  [-f] \
              symbolic_tag [files...]
     {update|up|upd} [-AdflPpR] [-d] [-r tag|-D date] files...

12.2 Subversion

Subversion est un système de contrôle de version de nouvelle génération qui a pour but de remplacer CVS. Les développeurs le considèrent actuellement en étape « alpha », mais il est probablement assez stable pour la plupart des utilisations. Aujourd'hui, Subversion est seulement disponible dans Debian unstable.


12.2.1 Installation d'un serveur Subversion

Le meta-paquet subversion-server dépend des paquets dont on a besoin (libapache2-dav-svn et subversion-tools) pour configurer un serveur.


12.2.1.1 Configurer un dépôt

Actuellement, le paquet subversion ne configure pas un dépôt, donc il faut le configurer à la main. Un emplacement possible pour un dépôt est /var/local/repos.

Créer le répertoire :

     # mkdir -p /var/local/repos

Créer la base de données du dépôt :

     # svnadmin create /var/local/repos

Mettre le dépôt en écriture par le serveur web :

     # chown -R www-data:www-data /var/local/repos

12.2.1.2 Configuration d'Apache2

Pour permettre l'accès au répertoire par authentification des utilisateurs, ajoutez (ou décommentez) ce qui suit à /etc/apache2/httpd.conf :

     <Location /repos>
       DAV svn
       SVNPath /var/local/repos
       AuthType Basic
       AuthName "Subversion repository"
       AuthUserFile /etc/subversion/passwd
       <LimitExcept GET PROPFIND OPTIONS REPORT>
       Require valid-user
       </LimitExcept>
     </Location>

Ensuite, créer un fichier d'authentification des utilisateurs avec la commande :

     htpasswd2 -c /etc/subversion/passwd some-username

Relancez Apache2, et votre nouveau dépôt Subversion sera accessible par l'URL http://hostname/repos.


12.2.2 Déplacer un dépôt CVS vers Subversion


12.2.3 Exemples d'utilisation de Subversion

Les sections suivantes vous enseignent comment utiliser les différentes commandes de Subversion.


12.2.3.1 Créer une nouvelle archive Subversion

Pour créer une nouvelle archive Subversion, tapez ce qui suit :

     $ cd ~/your-project         # go to your source directory
     $ svn import http://localhost/repos your-project \
       project-name -m "initial project import"

Cela crée un répertoire nommé project-name dans votre dépôt Subversion qui contient vos fichiers de projet. Regardez sur http://localhost/repos/ s'il est là.


12.2.3.2 Travailler avec Subversion

Travail sur project-y en utilisant Subversion :

     $ cd                            # aller dans le répertoire de travail
     $ svn co http://localhost/repos/project-y  # récupérer les sources
     $ cd project-y
      ... travailler ...
     $ svn diff                      # similaire à diff -u repository/ local/  
     $ svn revert modified_file      # annuler les changements sur un
     fichier
     $ svn ci -m "Describe changes"  # mettre vos changements sur le
     dépôt
     $ vi newfile_added
     $ svn add newfile_added
     $ svn add new_dir               # ajoute récursivement tous les
     fichiers de new_dir
     $ svn add -N new_dir2           # ajoute le répertoire
     non-récursivement
     $ svn ci -m "Added newfile_added, new_dir,
     new_dir2"
     $ svn up                        # fusionne la dernière version du dépôt
     $ svn log                       # affiche tous les changements
     $ svn copy http://localhost/repos/project-y \
           http://localhost/repos/project-y-branch \
           -m "creating my branch of project-y"  # ajouter une branche
     project-y
     $ svn copy http://localhost/repos/project-y \
           http://localhost/repos/proj-y_release1.0 \
           -m "project-y 1.0 release"    # ajoute une borne de version
      ... notez qu'ajouter une branche ou une borne est pareil.
      ... la seule différence est que l'on peut effectuer des
      ... changements sur une branche et pas sur une borne.
     
      ... faire des changements sur la branche ...
     
     $ # fusionne la copie de la branche vers la copie principale
     $ svn merge http://localhost/repos/project-y \
        http://localhost/repos/project-y-branch
     $ svn co -r 4 http://localhost/repos/project-y # récupère la
                                                      revision 4

[ précédent ] [ Table des matières ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ A ] [ suivant ]


Guide de référence pour Debian

CVS, jeu 18 jan 2007 11:52:23 UTC

Osamu Aoki osamu#at#debian.org
Traduction en Français : Guillaume Erbs gerbs#at#free.fr
Auteurs, Section A.1