CVS

CVS (Concurrent Version System) permet à plusieures personnes, éventuellement sur des machines distinctes, de modifiers les mêmes fichiers, en se souvenant de toutes les modifications intermédiaires. CVS est par exemple utilisé lors du développement de « gros » logiciels. Nous y avons eu recours pour gérer Hubris (le journal mathématique de l'ENS de Cachan).
  http://www.CVShome.org/
  http://www.loria.fr/~molli/cvs-index.html

Notes sur l'utilisation de CVS
Choisir un répertoire qui contiendra tous les fichiers, tans les fichiers de configuration et de log de CVS que les fichiers qu'il va archiver. C'est CVS qui utilisera ce fichier, on n'y accèdera pas directement.
Mettre ce nom de répertoire dans la variable d'environnement CVSROOT.
  export CVSROOT=$HOME/spool/CVS
Il faut créer ce répertoire et y mettre un répertoire CVSROOT (qui contiendra les fichiers « administratifs » de CVS).
  mkdir -p $CVSROOT/CVSROOT
Créer le répertoire dans lequel on va travailler, et y mettre quelques fichiers.
  mkdir Projet
  cd Projet
  vi README
Mettre ce répertoire et tous les fichiers qu'il contient dans l'archive CVS. Les deux derniers arguments arguments (vendortag et releasetag) ne sont pas vraiment utiles.
  cd ..
  cvs import Projet zoonek FryingPan
On peut maintenant tout effacer et commencer à travailler avec une copie des fichiers.
  rm -rf Projet
  cvs checkout Projet
  cd Projet/Projet
Pour ajouter un fichier (que l'on vient de créer dans la copie de travail) :
  cvs add fichier
  cvs commit
Pour effacer un fichier
  cvs delete fichier
  cvs commit
Pour demander à CVS d'enregistrer les modifications apportées aux fichiers (et aussi pour répercuter les commandes cvs add ou cvs delete qui n'auraient pas été suivies de cvs commit) :
  cvs commit
Pour demander à CVS de mettre à jour la copie de travail des fichiers, au cas où un autre développeur aurait apporté des modifications (généralement, ce n'est pas grave que deux personnes modifient en même temps le même fichier, pour peu que ces modifications ne soient pas incompatibles -- en cas de problème, CVS le signale et demande à l'utilisateur ce qu'il doit faire).
  cvs update
On peut effacer à tous moment la copie de travail (mais il vaut mieux taper « cvs commit » avant, sinon, on risque de perdre les dernières modifications).

Les versions antérieures
Pour comparer un fichier (contenu dans le répertoire de travail) à la version archivée par CVS (si on ne précise pas de fichier, c'est le répertoire courrant qui est pris en compte, avec tous ses sous-répertoires) :
  cvs diff README
Pour avoir le numéro de version d'un fichier :
  cvs history -a -c README
Pour avoir la différence entre la version actuelle et la version 1.2 :
  cvs diff -r 1.2 README
Pour avoir la différence entre la version 1.3 et la version 1.5 :
  cvs diff -r 1.3 1.5 README

Utilisation de CVS par différentes personnes
Il faut que les fichiers de l'archive CVS soient lisibles par tous les membres du projet et que les répertoires de cette archive soient accessibles en écriture par tous les membres du projet.
  chown -R :hubris $CVSROOT

CVS à distance
Normalement, ça devrait marcher comme ça :
  export CVS_RSH=ssh
  export CVSROOT=zoonek@piano.dptmaths.ens-cachan.fr:/bangkok/Hubris/cvs
  cvs checkout Hubris/Numeros/3
Ça ne marche pas, car la variable d'environement PATH (sur piano) ne contient pas le répertoire où se trouve l'exécutable de cvs. Je n'ai pas trouvé le fichier de configuration qui était lu...
On peut remplacer ssh par un script du genre
  #!/bin/sh
  # Premier paramère : nom de la machine
  host=$1
  shift
  # second paramètre : -l
  shift
  # Troisième paramètre : nom de l'utilisateur
  user=$1
  shift
  # dernier paramèrtre : "cvs server"
  exec ssh $host -l $user /usr/public/gnu/bin/$*

Note sur l'utilisation de CVS pour Hubris (1997)
Pour obtenir une copie de tout cela, afin de la modifier :
  export CVSROOT=/bangkok/Hubris/cvs
  cvs checkout Hubris
Pour obtenir une copie d'un seul répertoire, il suffit de le nommer (mais un seul ne suffit pas).
  cvs checkout Hubris/Numeros/1
  cvs checkout Hubris/Numeros/bin
  cvs checkout Hubris/Numeros/inputs
  cvs checkout Hubris/Numeros/fonts
Pour pouvoir compiler les fichiers *.tex, il faut d'abord exécuter
  . Hubris/Numeros/bin/ENV
Qui contient
  JOURNAL=/pekin/zoonek/tex/Journal
  JOURNAL=`pwd | perl -p -e 's|(.*Hubris/Numeros/).*|\1|'`
  JOURNAL=`pwd | perl -p -e 's|(.*Hubris/Numeros).*|\1| || s|(.*Hubris).*|\1|'`
  echo $JOURNAL
  TEXINPUTS=:$JOURNAL/inputs
  BSTINPUTS=:$JOURNAL/inputs
  MFINPUTS=:$JOURNAL/fonts
  TEXFONTS=:$JOURNAL/fonts
  TFMFONTS=:$JOURNAL/fonts
  CVSROOT=/bangkok/Hubris/cvs
  export TEXINPUTS BSTINPUTS MFINPUTS TEXFONTS CVSROOT
  PATH=$PATH:/pekin/zoonek/tex/Journal/bin
Il doit encore manquer des fichiers dans Hubris/Numeros/inputs.
Pour rajouter un fichier
  cvs add fichier.tex
Pour répercuter les modifications que l'on vient d'effectuer
  cvs commit
Pour répercuter les modifications que effectuées entre-temps par quelqu'un d'autre
  cvs update
Pour que d'autres personnes puissent modifier les fichiers, il serait bon qu'ils appartiennent au groupe
  chown -R :hubris /bangkok/Hubris/cvs/

  Fri Aug  4 14:36:05 CEST 2000

Vincent Zoonekynd
<zoonek@math.jussieu.fr>
latest modification on mar jui 3 14:43:30 CEST 2001