Petit guide de survie CVS


Ce petit document est un résumé des principales commandes à connaître pour utiliser CVS. Nous ne parlons pas des tags, des branches, etc.

Nous supposons que :

  • vous disposez d'un projet pré-existant dans /home/user/preprojet ;
  • ce projet s'appelle(ra) monprojet ;
  • votre login est monlogin ;
  • le dépôt central (le repository) est ou sera dans /home/monlogin/cvs-repository (sur la machine repos.domain.fr).

Pour tous les projets

  • Création et initialisation du repository

    mkdir /home/monlogin/cvs-repository
    cvs -d /home/monlogin/cvs-repository init

Import (ou création) d'un nouveau projet

  • Import d'une arborescence existante (module monprojet)

    cd /home/monlogin/preprojet
    cvs -d /home/monlogin/cvs-repository import \
          -m "Version de depart" monprojet monlogin init
    cd ..
  • Pour créer un nouveau projet, il suffit d'importer un répertoire vide...

Extraction d'un projet

  • Extraire l'arborescence d'un module (monprojet). Ces commandes créeront un nouveau répertoire contenant le projet extrait.

    • Accès local au repository (directement via le filesystem)

      cvs -d /home/monlogin/cvs-repository checkout monprojet
    • Accès distant au repository (via SSH)

      setenv CVS_RSH SSH # pas toujours necessaire
      cvs -d monlogin@repos.domain.fr:/home/monlogin/cvs-repository \
            checkout monprojet

Gestion d'un projet au jour le jour

  • Voir l'état des fichiers :

    cvs status .
    cvs status nomdefichier

    Les différents états d'un fichier :

    • Up-to-date - Le fichier est à jour.
    • Locally Modified - Le fichier a été modifié localement et se base sur la dernière version de référence. Vous pouvez intégrer vos modifications loacales via commit.
    • Needs Checkout ou Needs Patch - Le fichier du repository est plus récent que la version locale. Il faut le mettre à jour via update.
    • Needs Merge - Le fichier a été modifié localement mais en se basant sur une version qui n'est pas la plus récente. Vous devez essayer d'intégrer la nouvelle version avec vos modifications via update
    • File had conflicts on merge - Le fichier contient des conflits entre les modifications locales et les modifications du repository (chercher du texte entouré par <<<<< ... >>>>> dans le fichier). Il faut les nettoyer et refaire la mise à jour via update
    • Locally Added - Le fichier vient d'être ajouté localement et n'a pas encore été intégrer au repository via commit
  • Voir les différences entre la version locale et la version de référence du repository :

    cvs diff nomdefichier
    cvs diff -w -c nomdefichier
  • Intégrer les modifications locales vers le repository

    cvs commit -m "message de mise à jour" nomdefichier ...
  • Voir les différencess entre la version locale et une ancienne version (par exemple 1.1) du repository :

    cvs diff -r 1.1 nomdefichier
  • Voir les messages de mise à jour :

    cvs log nomdefichier
  • Intégrer les modifications du repository vers la version locale :

    cvs update -d nomdefichier

    (à faire deux fois si conflits... à résoudre entre les deux fois.)

  • Ajout d'un nouveau fichier :

    cvs add nomdefichier
    cvs commit -m "nouveau fichier" nomdefichier
  • Pour récupérer (créer) un nouveau fichier (ou un fichier qui a été supprimé localement) depuis le repository :

    cvs udpate nomdefichier

    Si nomdefichier est le nom d'un répertoire (. par exemple), cela met à jour l'ensemble du répertoire et de ses sous-répertoires.

  • Pour supprimer un fichier (du repository) :

    rm nomdefichier
    cvs remove nomdefichier
    cvs commit -m "suppression fichier" nomdefichier

Quelques conseils généraux

A priori, on ne touche jamais ni au contenu du repository ni au contenu des répertoires CVS locaux. Les seuls modifications qu'on peut faire sur le repository ont rapport aux droits d'accès : on peut donner accès en lecture/écriture à un sous-répertoire à tout un groupe d'utilisateur pour que chacun puisse y faire ses propres modifications (ne pas oublier de positionner le bit 's').

On peut utiliser les commandes d'ajout et de suppression sur des sous-répertoires pour gérer toute une arborescence.

CVS ne gère pas les changements de noms : il faut faire une copie, la suppression de l'originale puis l'ajout de la copie (mais CVS ne fait aucun lien entre l'originale et la copie). Pour éviter cela, choisissez les noms de vos fichiers et l'organisation de votre arborescence avec soin.