<chapter id="cvs">
<title
>Utilisation de &CVS;</title>
<indexterm zone="cvs"
><primary
>CVS</primary
></indexterm>
<indexterm zone="cvs"
><primary
>contrôle de révision</primary
></indexterm>

<sect1 id="cvs-basics">
<title
>Bases de &CVS;</title>

<para
>&CVS; est le système de contrôle de révision auquel beaucoup de projets « open source » - dont &kde; &mdash; font appel. Il stocke tous les codes sources dans un emplacement central, appelé le <emphasis
>référentiel</emphasis
>. À partir du référentiel, les développeurs peuvent extraire une version actuelle du projet ou des instantanés de celui-ci à des moments arbitraires. Contrairement à certains autres systèmes de contrôle de révision, il n'est pas nécessaire de <emphasis
>verrouiller</emphasis
> les fichiers sur lesquels on veut travailler. Ainsi, le développement peut être extrêmement parallélisé. </para>

<para
>Chaque fois qu'un développeur a terminé une tâche, il <emphasis
>valide</emphasis
> (« commits ») son code (accompagné d'un message de journal). &CVS; prend les travaux pour fusionner les changements effectués par plusieurs développeurs. Il peut naturellement arriver que des développeurs travaillent sur le même morceau de code, ce qui a pour conséquence un ensemble conflictuel de changements (en pratique, cela se produit rarement et c'est souvent le signe d'un manque de communication). Dans ce cas, &CVS; rejette une validation. Un fichier peut être validé uniquement après que tous les conflits ont été résolus. </para>

<para
>Jusqu'ici, ce document s'est borné à une description des fonctionnalités de base de &CVS; qu'on est susceptible de rencontrer. Cependant, &CVS; a beaucoup plus de cordes à son arc : on peut maintenir plusieurs branches d'un projet (&pex; &kde; 1.1.2 et &kde; 2 étaient des branches de l'arborescence de développement de &kde;), fusionner des changements d'une branche à une autre, demander des différences entre révisions, l'historique de révision des fichiers, &etc; </para>

<para
>&CVS; est implémenté sous la forme d'un système client-serveur. En tant qu'utilisateur, toute la communication avec le référentiel passe par le programme en ligne de commande &cvs;. Une interface utilisateur de niveau plus élevé est disponible grâce à des interfaces comme &cervisia; (<ulink url="http://cervisia.sf.net"
></ulink
>) ou <application
>TkCVS</application
> (<ulink url="http://tkcvs.sf.net"
></ulink
>). Dans &kdevelop;, seule une petite partie de la fonctionnalité de &cvs; qui est importante pour votre travail quotidien peut être utilisée directement. </para>

<para
>Une bonne connaissance de base de l'utilisation de &CVS; est supposée. En particulier, vous devrez savoir comment extraire un projet donné du référentiel. Nous recommandons l'ouvrage « Open Source Development With &CVS; », par Karl Fogel, qui est distribué librement (sauf en ce qui concerne les chapitres non techniques). Consultez <ulink url="http://cvsbook.red-bean.com/cvsbook.html"
></ulink
>. </para>

</sect1
> <!-- cvs-basics -->

<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->

<sect1 id="cvs-commands">
<title
>Commandes &CVS; dans &kdevelop;</title>

<para
>Dans les vues des fichiers, les éléments de menu contextuel suivants sont disponibles : </para>

<variablelist>
<varlistentry>
<term
>Ajouter au référentiel</term>
<listitem>
<para
>Prépare le fichier marqué pour son ajout au référentiel. Le fichier sera transféré au référentiel la prochaine fois que vous le validerez (ou le dossier qui le contient). </para>
</listitem>
</varlistentry>

<varlistentry>
<term
>Supprimer du référentiel</term>
<listitem>
<para
>Prépare un fichier pour sa suppression du référentiel. Comme cette action supprime aussi le fichier sur le système de fichier local, soyez prudent en utilisant cette fonctionnalité ! </para>
</listitem>
</varlistentry>

<varlistentry>
<term
>Mettre à jour</term>
<listitem>
<para
>Exécute <command
>cvs update</command
> pour fusionner tout changement d'autres utilisateurs dans votre dossier de travail. Quand vous employez cet élément de menu sur un dossier, la mise à jour s'effectue récursivement, sauf si vous avez désactivé cette fonction dans le fichier de configuration <filename
>.cvsrc</filename
>. </para>
</listitem>
</varlistentry>

<varlistentry>
<term
>Valider</term>
<listitem>
<para
>Exécute <command
>cvs commit</command
> pour envoyer tout changement effectué localement sur le référentiel. Notez que vous devriez faire une mise à jour auparavant. Sinon, si un autre utilisateur a validé ses propres changements avant, &CVS; risque de vous retourner un message d'erreur. </para>
</listitem>
</varlistentry>
</variablelist>

<para
>Toutes ces commandes sont invoquées en tant que sous-processus par &kdevelop;, sans autres options sur la ligne de commande ou variables d'environnement variables. Ce peut être un problème quand la connexion avec le serveur &CVS; passe par une connexion &ssh; et nécessite que vous saisissiez un mot de passe chaque fois que vous validez ou mettez à jour. C'est par exemple nécessaire quand votre projet est hébergé sur <filename
>sourceforge.net</filename
>. La FAQ de &CVS;/SSH que vous pouvez trouver dans la documentation de SourceForge décrit quelques contournements pour ce problème. </para>

</sect1
> <!-- cvs-basics -->

<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->

<sect1 id="cvs-behind">
<title
>Les coulisses</title>

<sect2 id="cvs-behind-workdir">
<title
>Ce que &CVS; enregistre dans le dossier de travail</title>

<para
>(... à écrire ...) </para>
</sect2
> <!-- cvs-behind-workdir -->

</sect1
> <!-- cvs-behind -->

</chapter
> <!-- cvs -->
