<chapter id="cvs">
<title
>Usare &CVS;</title>
<indexterm zone="cvs"
><primary
>CVS</primary
></indexterm>
<indexterm zone="cvs"
><primary
>controllo modifiche</primary
></indexterm>

<sect1 id="cvs-basics">
<title
>Fondamenti di &CVS;</title>

<para
>&CVS; è il sistema di controllo delle modifiche che viene usato in molti progetti open source - incluso &kde;. Esso conserva tutti i sorgenti in una locazione centrale, chiamata <emphasis
>deposito</emphasis
> (repository). Dal deposito, gli sviluppatori possono controllare la versione corrente del progetto o gli snapshot di un qualunque istante di tempo. A differenza di altri sistemi di controllo delle modifiche, non è necessario <emphasis
>fare il lock</emphasis
> dei file su cui si vuole lavorare. In questo modo lo sviluppo può essere altamente parallelizzato. </para>

<para
>Quando uno sviluppatore ha finito un compito, <emphasis
>effettua il commit</emphasis
> del suo codice (accompagnato da un messaggio di log). &CVS; si occupa della fusione dei cambiamenti fatti dai diversi sviluppatori. Ovviamente può succedere che più sviluppatori lavorino sullo stesso pezzo di codice; potrebbe risultare una serie di cambiamenti in conflitto tra loro (in pratica questo accade raramente, ed è spesso un segno di una carenza di comunicazione). In questo caso &CVS; rifiuta le modifiche; si potrà fare il commit di un file solo dopo che saranno risolti tutti i conflitti. </para>

<para
>Finora si sono descritte le caratteristiche di base di &CVS; che compaiono normalmente, ma &CVS; ne fornisce molte di più: si possono mantenere diversi rami di un progetto (&eg; &kde; 1.1.2 e &kde; 2 erano rami dell'albero di sviluppo di &kde;), unire i cambiamenti di un ramo con un altro, chiedere le differenze tra le revisioni, la storia delle revisioni di file &etc; </para>

<para
>&CVS; è implementato come un sistema client-server. Come utente, tutta la comunicazione con il deposito viene effettuata attraverso il programma a linea di comando &cvs;. É disponibile un livello più alto di interfaccia utente attraverso frontend come &cervisia; (<ulink url="http://cervisia.sf.net"
></ulink
>) o <application
>TkCVS</application
> (<ulink url="http://tkcvs.sf.net"
></ulink
>). In &kdevelop; può essere usata direttamente solo una piccola parte delle funzionalità di &cvs; che sono importanti per il lavoro quotidiano. </para>

<para
>Viene supposta una conoscenza di base dell'uso di &CVS;. In particolare, si dovrebbe sapere come controllare un dato progetto nel deposito. Viene raccomandato il libro <quote
>Open Source Development With &CVS;</quote
> di Karl Fogel che è distribuito liberamente (tranne i capitoli non-tecnici). Vedere <ulink url="http://cvsbook.red-bean.com/cvsbook.html"
></ulink
>. </para>

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

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

<sect1 id="cvs-commands">
<title
>Comandi &CVS; in &kdevelop;</title>

<para
>Nella vista dei file, sono disponibili le seguenti voci del menu contestuale: </para>

<variablelist>
<varlistentry>
<term
>Aggiungi al deposito</term>
<listitem>
<para
>Predispone i file contrassegnati per l'aggiunta al deposito. Il file viene trasferito al deposito quando si effettua il commit del file (o della directory che lo contiene) la volta successiva. </para>
</listitem>
</varlistentry>

<varlistentry>
<term
>Rimuovi dal deposito</term>
<listitem>
<para
>Predispone un file per la rimozione dal deposito. Questo cancella il file anche nel file system locale, quindi usare questa funzione con prudenza! </para>
</listitem>
</varlistentry>

<varlistentry>
<term
>Aggiorna</term>
<listitem>
<para
>Esegue il comando <command
>cvs update</command
> per fondere tutti i cambiamenti degli altri utenti nella directory di lavoro. Quando si usa questa voce di menu su una directory normalmente viene fatto l'aggiornamento ricorsivamente, tranne il caso in cui questa opzione sia stata disabilitata nel file di configurazione <filename
>.cvsrc</filename
>. </para>
</listitem>
</varlistentry>

<varlistentry>
<term
>Commit</term>
<listitem>
<para
>Esegue il comando <command
>cvs commit</command
> per inviare tutte le modifiche locali al deposito. Notare che si dovrebbe fare l'aggiornamento prima di dare questo comando, altrimenti nel caso che un altro utente abbia inviato nel frattempo le proprie modifiche &CVS; potrebbe dare un messaggio di errore. </para>
</listitem>
</varlistentry>
</variablelist>

<para
>Tutti questi comandi sono eseguiti da &kdevelop; come sottoprocessi senza nessuna opzione a linea di comando o variabile d'ambiente. Questo potrebbe costituire un problema se ci si connette con il server &CVS; attraverso una connessione &ssh; che richiede l'inserimento di una password ogni volta che viene effettuato l'invio o l'aggiornamento. Ad esempio questo è necessario quando il proprio progetto è ospitato su <filename
>sourceforge.net</filename
>. Nella &CVS;/SSH FAQ che si può trovare nella documentazione di SourceForge sono descritte le soluzioni a questo problema. </para>

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

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

<sect1 id="cvs-behind">
<title
>Dietro le quinte</title>

<sect2 id="cvs-behind-workdir">
<title
>Cosa registra &CVS; nella directory di lavoro</title>

<para
>(... da scrivere ...) </para>
</sect2
> <!-- cvs-behind-workdir -->

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

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