%%
%% CVS - Concurrent Versions System
%%
%% Copyright (C) 2003 Truelite SRL.  Permission is granted to
%% copy, distribute and/or modify this document under the terms of the GNU Free
%% Documentation License, Version 1.1 or any later version published by the
%% Free Software Foundation; with no Invariant Sections,
%% with no Front-Cover Texts, and with no Back-Cover Texts.  A copy of the
%% license is included in the section entitled "GNU Free Documentation
%% License".
%%
%% Sept 2003, Christopher R. Gabriel <cgabriel@truelite.it>


\chapter{CVS - Concurrent Versions System}
\label{cha:shell_commands}


\section{Introduzione}
\label{sec:cvs_introduzione}
CVS e' un sistema per il controllo delle revisioni. Utilizzandolo,
siamo in grado di registrare lo storico delle modifiche che vengono
apportate al nostro lavoro.

Ad esempio, quando un software viene modificato e' possibile che
vengano introdotti dei bugs, ed e' possibile non notare la presenza di
questi se non dopo molto tempo che la modifica che li ha introdotti e'
stata eseguita. Con CVS risulta estremamente facile ottenere vecchie
versioni dello stesso file per trovare esattamente quale e' stata la
modifica che ha introdotto il problema. Questo, in alcuni casi, e' un
aiuto enorme al lavoro dello sviluppatore.

Vero, e' possibile salvare separatamente ciascuna versione di tutti i
   file che create. Questo comporterebbe pero' lo spreco di un enorme
   spazio disco. CVS mantiene tutte le versioni di un file all'interno
   di un singolo file, in modo molto intelligente, registrando
   unicamente le differenze tra le varie versioni.

CVS inoltre vi aiuta se fate parte di un gruppo di persone che
   lavorano allo stesso progetto. E' veramente molto semplice
   sovrascrivere le modifiche fatte da altre persone ad un file, a
   meno che non si faccia estrema attenzione. Alcuni editor, come GNU
   Emacs, cercano di assicurarsi che un file non venga modificato mai
   contemporaneamente da due utenti diversi. Sfortunatamente, se uno
   dei due utenti non utilizza lo stesso editor, questa soluzione non
   funziona. CVS risolve questo problema isolando ciascun sviluppatore
   dagli altri. Ciascuno sviluppatore lavora nella sua directory
   locale, e CVS si occupa di integrare il lavoro svolto da ciascun
   con il resto, in modo automatico.

CVS e' nato come un insieme di script shell, scritti da Dick Grune, e
   inviati al newgroup Usenet \texttt{comp.sources.unix}, nel volume 6
   del Luglio 1986. Anche se nessuna componente di questi script shell
   e' attualmente presente nella versione corrente di CVS, gran parte
   degli algoritmi di risoluzione dei conflitti deriva da questi.

Nell'Aprile 1989 Brian Berliner ha disegnato e implementato CVS. 

E' possibile ottenere CVS in vari modi, inclusa la rete. Per maggiori
   informazioni su CVS, incluso il download dello stesso, e' possibile
   consultare il sito web \texttt{http://www.cvshome.org/}

Esiste inoltre una mailing list, chiamata 'info-cvs', dedicata a CVS,
ospitata dal Progetto GNU (\texttt{http://www.gnu.org}).

\section{Architettura}
\label{sec:cvs_architettura}

CVS e' costituito da due componenti fondamentali: un client e un
repository. Il client e' il programma utilizzato dallo
sviluppatore/sistemista per accedere al repository, aggiungere file,
inviare le proprie modifiche, prelevare file. Il repository invece e'
la componente ``server'', se cosi' possiamo dire, che si occupa di
gestire i file inseriti. Il repository puo' essere locale o remoto
(quindi, trovarsi su di una specifica macchina presente sulla rete).

La posizione del repository viene mantenuta in una apposita variabile
di ambiente, \texttt{CVSROOT}. Questa variabile

%%% Local Variables: 
%%% mode: latex
%%% TeX-master: "corso"
%%% End: 
