Inserisci Infobox

CVS - Concurrent Versions System

Utilizzo e funzionalità del CVS

Funzionamento del CVS
Autore: valentino - Ultimo Aggiornamento: 2003-09-11 19:25:16 - Data di creazione: 2003-09-11 19:25:16
Tipo Infobox: DESCRIPTION - Skill: 2- JUNIOR

Il CVS è un sistema che consente di archiviare informazioni importanti e diverse versioni di file (chiamate revisioni) di un determinato progetto. Nel CVS possono essere registrate diverse versioni di un programma software (definite release) in modo da poter rilasciare gli aggiornamenti in base a una versione specifica del programma pur continuando a sviluppare versioni future.
Il CVS è il piu' diffuso software per il controllo delle versioni per lo sviluppo del mondo Open Source di Linux. Consente di sviluppare un progetto da diverse persone contemporeanemente anche da diverse parti del mondo.

Un repository è composto da moduli, che sono i singoli progetti. L'utente può visionare una copia dei moduli a cui è interessato. Dopo aver modificato uno o più file di un modulo, l'utente registra la modifica insieme a un messaggio di log che descrive i cambiamenti. Quando è eseguita tale operazione, le modifiche apportate al file vengono salvate nel repository, e il numero delle revisioni al file aumentano. Se necessario è possibile recuperare in qualsiasi momento le revisioni precedenti del file insieme con il log.
Altri utenti possono aggiornare la propia copia di moduli per recuperare le ultime revisioni del file dal repository e visualizzare i messaggi di log degli altri utenti.
Se due o più persone tentano di modificare lo stesso file, le modifiche saranno incorporate in una sola revisione che, in caso di conflitti, includerà dei messaggi di avviso. Dato che nel CVS è possibile archiviare più versioni dello stesso file, se necessario le modifiche possono essere annullate.
Gli sviluppatori non possono eliminare accidentalmente i file perchè le copie master si trovano nel repository del CVS sul server.

CVS per System Administrator
Autore: homer - Ultimo Aggiornamento: 2005-04-19 13:31:08 - Data di creazione: 2005-04-10 15:27:43
Tipo Infobox: TIPS - Skill: 2- JUNIOR

Utilizzo del CVS durante l'amministrazione di sistema.

Sebbene il Cuncurrent Version System, sia stato pensato ed è utilizzato nella maggior parte dagli sviluppatori di software, è possibile uno suo proficuo utilizzo anche da parte dell'amministratore di sistema. Essendo un repository centralizzato, si presta alla memorizzazione di particolari script di sistema e file di configurazioni al pari del codice sorgente. Tra i vantaggi dell'utilizzo del CVS è possibile avere:

- backup delle configurazioni di sistema;
- history e autore delle modifiche;
- possibilità di recupero script e configurazioni dismesse in passato;
- disponibilità di script di tuning post installazione, pronti all'uso e divisi per sistema operativo;

Il tutto, lasciando il sistema pulito, senza necessità di avere disseminati file nelle varie directory di ogni macchina.

Rinominare file con CVS
Autore: homer - Ultimo Aggiornamento: 2005-04-23 00:45:17 - Data di creazione:
Tipo Infobox: TIPS - Skill: 2- JUNIOR

Rinominare un file presente nel repository.

Rinominare un file su un repository CVS consiste sostanzialmente in tre operazioni:
- un move per rinominare il file in locale;
- un cvs remove per rimuovere il file dal repository;
- un cvs add per inserire il nuovo (in quanto per CVS il file è come se fosse nuovo) file;
Infine è necessario un commit per rendere effettive le modifiche sul repository.

[azitti@pegasus EnigmaWebSite]$ mv index.htm index.php
[azitti@pegasus EnigmaWebSite]$ cvs remove index.htm
cvs remove: scheduling `index.htm' for removal
cvs remove: use 'cvs commit' to remove this file permanently
[azitti@pegasus EnigmaWebSite]$ cvs add index.php
cvs add: scheduling file `run-fruition.sh' for addition
cvs add: use 'cvs commit' to add this file permanently
[azitti@pegasus EnigmaWebSite]$ cvs commit -m "Rinominato index.htm in index.php" index.htm index.php
Removing index.htm;
/home/cvs/EnigmaWebSite/index.htm,v  <--  index.htm
new revision: delete; previous revision: 1.4
done
RCS file: /home/cvs/EnigmaWebSite/index.php,v
done
Checking in index.php;
/home/cvs/EnigmaWebSite/index.php,v  <--  index.php
initial revision: 1.1
done

CVS rollback
Autore: homer - Ultimo Aggiornamento: 2005-04-20 15:28:50 - Data di creazione:
Tipo Infobox: TIPS - Skill: 3- INTERMEDIATE

Effettuare il rollback di uno o più file di cui è già stato eseguito il commit nel repository.

Talvolta, è possibile che si presenti l'eventualità di effettuare un rollback di uno o più file, di cui si è già effettuato il commit sul repository. E' possibile ripristinare una versione precedente di un file, facendo uso del comando update e dell'opzione per il merge:

homer@Joker:~/repository/test-module$ cvs update -j 1.2 -j 1.1 index.php
in questo caso, viene indicato a cvs di fare un update, facendo il merge (-j) della versione 1.2 con la 1.1 ovvero quella a cui si vuole ritornare
RCS file: /home/cvs/test-module/index.php,v
retrieving revision 1.2
retrieving revision 1.1
Merging differences between 1.2 and 1.1 into index.php


Al termine dell'operazione il file sarà ripristinato alla originaria versione indicata. Il comando può essere utilizzato su più file, qualora la versione di partenza e la versione di destinazione sia la stessa.

Modificare il commento di un commit
Autore: homer - Ultimo Aggiornamento: 2005-04-23 00:50:28 - Data di creazione: 2005-01-29 20:10:46
Tipo Infobox: TIPS - Skill: 2- JUNIOR

CVS permette di modificare il commento relativo ad un file anche in seguito al suo commit.

Nel caso in cui si renda necessario modificare il commento di un file, oppure aggiungerlo quando mancante, è possibile farlo medianto il comando admin unito all'opzione -m, indicando come parametro il numero di revisione da utilizzare: cvs admin -mnumero di revisione:"nuovo commento" nome file:

[azitti@pegasus EnigmaWebSite]$ cvs admin -m1.1:"Aggiunti ignore patterns" .cvsignore
RCS file: /home/cvs/EnigmaWebSite/.cvsignore,v
done


Non è possibile utilizzare questo comando su più file contemporaneamente, in quanto, molto probabilmente il numero di revision number, è differente.

Connettersi a CVS via SSH
Autore: homer - Ultimo Aggiornamento: 2004-11-20 15:06:09 - Data di creazione: 2004-11-20 15:06:09
Tipo Infobox: TIPS - Skill: 3- INTERMEDIATE

Esiste la possibilità di comunicare con un server CVS remoto modalità sicura, tramite SSH. Per fare questo è necessario che sulla macchina in cui è presente il servizio CVS, sia in esecuzione il demone SSH (porta 22), quindi, utilizzare, anzichè il classico protocollo pserver, il protocollo ext, avendo cura di aver settato la variabile d'ambiente CVS_RSH a ssh.

homer@Joker:~$ export CVSROOT=:ext:homer@enigma:/home/cvs
Settaggio della CVS root, specificando ext in luogo di pserver
homer@Joker:~$ export CVS_RSH=ssh
Settaggio per l'utilizzo di ssh per la connessione
homer@Joker:~$ cvs co EnigmaWebSite
homer@enigma's password: ********
La password richiesta è quella della propria utenza sulla macchina remota
cvs checkout: Updating EnigmaWebSite
U EnigmaWebSite/enigma.jpg
U EnigmaWebSite/index.php
U EnigmaWebSite/phpinfo.php
U EnigmaWebSite/powered-apache-linux-slackware.gif
U EnigmaWebSite/style-enigma.css


E' opportuno tener presente, che passando dal protocollo pserver a ext utilizzando ssh, non è più il file passwd presente nella directory CVSROOT che si occupa della gestione delle autorizzazioni di accesso, ma è necessario che l'utente tramite il quale ci si collega abbia i permessi correttamente settati per il checkout e la modifica dei file presenti nel repository.

CVS Keyword Substitution
Autore: homer - Ultimo Aggiornamento: 2004-11-12 17:43:28 - Data di creazione: 2004-11-12 17:43:28
Tipo Infobox: TIPS - Skill: 4- ADVANCED

CVS tramite un meccanisco chiamato Keyword Substitution permette di scrivere in modo automatico informazioni nei propri file, in fase di commit o in quella di checkout.

La Keyword Substitution, viene attuata dal CVS in presenza di particolari pattern racchiusi tra caratteri $.

KEYWORD PATTERN
I pattern riconosciuti da CVS sono:
$Author$ : autore dell'ultimo cambiamento apportato al file;
Es.: $Author: azitti $
$Date$ : data e ora dell'ultimo cambiamento;
Es.: $Date: 2004/11/09 08:40:05 $
$Header$ : contiene diverse informazioni quali percorso completo del file RCS nel repository, revisione, data, autore, stato del file, e locker (se il file risulta bloccato);
Es.: $Header: /home/cvsroot/progettolibro/indice/Attic/testfile.txt,v 1.1.2.1 2004/11/09 08:40:05 azitti Exp $
$Id$ : visualizza le stesse informazioni di $Header$ ma senza il percorso completo del file RCS;
Es.: $Id: testfile.txt,v 1.1.2.1 2004/11/09 08:40:05 azitti Exp $
$Locker$ : nome di chi ha bloccato il file;
Es.: $Locker:  $
$Log$ : visualizza numero di revisione, data, autore e accoda i messaggi di log di ogni cambiamento;
Es.: $Log: testfile.txt,v $
Revision 1.1.2.1  2004/11/09 08:40:05  azitti
Aggiunto file di test keyword substitution

$Name$ : Visualizza il nome dello sticky tag in cui viene registrato se la versione del file appartiene ad un branch oppure è "taggata" ;
Es.: $Name: test-br-5-10-2004 $
$RCSfile$ : nome del file RCS nel repository;
Es.: $RCSfile: testfile.txt,v $
$Revision$ : numero di revisione;
Es.: $Revision: 1.1.2.1 $
$Source$ : percorso completo del file RCS nel repository;
Es.: $Source: /home/cvsroot/progettolibro/indice/Attic/testfile.txt,v $
$State$ : stato della revisione;
Es.: $State: Exp $

Questa funzionalità permette di stabilire la versione di un file, solo visualizzandolo, senza utilizzare i comandi status o log del CVS.

CVS multi-repository
Autore: homer - Ultimo Aggiornamento: 2004-10-11 04:02:30 - Data di creazione: 2004-10-11 04:02:30
Tipo Infobox: TIPS - Skill: 4- ADVANCED

E' possibile tramite un solo CVS server installato su un sistema, gestire più repository contemporaneamente, ognuno indipendente dall'altro e con i propri utenti e password. Per poter sfruttare questa possibilità è necessario aggiungere le directory degli ulteriori repository, in coda a quella già esistente.  

Supponendo di voler gestire oltre a quello presente in /home/cvs, un nuovo repository presente nella directory /home/system-cvs, sarà necessario, dopo averlo inizializzato tramite il comando cvs -d /home/system-cvs init ed averne configurato gli utenti, aggiungerlo al file di configurazione gestito dal superdemone di sistema inetd o Xinetd:

root@enigma:/# grep cvs /etc/inetd.conf
cvspserver stream tcp nowait root /usr/sbin/tcpd /usr/bin/cvs --allow-root=/home/cvs /home/system-cvs pserver


Nel caso si utilizzi xinetd:

[root@vagante xinetd.d]# cat cvspersver
service cvspsever
{
        port           = 2401
        socket_type    = stream
        protocol       = tcp
        user           = root
        wait           = no
     passenv         = PATH
        server         = /usr/bin/cvs
    server_args       = -f --allow-root=/home/cvs/ /home/system-cvs pserver
}

E' possibile notare come in tutti e due i casi inetd e xinetd --allow-root definisce due repository

Una volta aggiunte le modifiche, è necessario riavviare il demone.

Ovviamente, il client dovrà essere a conoscenza di quale connessione utilizzare e si avranno quindi due stringhe di connessione differenti quali :pserver:utente@hostname:/home/cvs nel caso di accesso al primo repository, oppure :pserver:utente@hostname:/home/system-cvs nel caso di accesso al secondo.

CVS command short forms
Autore: homer - Ultimo Aggiornamento: 2004-10-11 04:18:05 - Data di creazione: 2004-10-11 04:18:05
Tipo Infobox: TIPS - Skill: 2- JUNIOR

I comandi che è possibile impartire al CVS dispongono di una loro controparte abbreviata definita short form.

La forma abbreviata di un comando CVS permette di risparmiare tempo, e diminuisce la possibilita' di fare errori. Tramite il comando cvs --help-synonyms e' possibile vedere l'elenco completo delle short forms disponibili.

[homer@vagante libro]$ cvs --help-synonyms
CVS command synonyms are:
        add          ad new
        admin        adm rcs
        annotate     ann
        checkout     co get
        commit       ci com
        diff         di dif
        export       exp ex
        history      hi his
        import       im imp
        log          lo
        login        logon lgn
        rannotate    rann ra
        rdiff        patch pa
        release      re rel
        remove       rm delete
        rlog         rl
        rtag         rt rfreeze
        status       st stat
        tag          ta freeze
        update       up upd
        version      ve ver


Per i comandi più utilizzati, quali checkout, commit e update, le short forms posono risultare utili.

Migrazione di un repository CVS
Autore: homer - Ultimo Aggiornamento: 2004-10-11 04:03:47 - Data di creazione: 2004-10-11 04:03:47
Tipo Infobox: DESCRIPTION - Skill: 3- INTERMEDIATE

Puo essere necessario per svariati motivi, migrare un repository CVS da un server ad un altro. L'operazione comporta sostanzialmente, la creazione di un file archivio della directory del CVS, e la scompattazione sul nuovo server dopo averlo configurato.

PREPARAZIONE NUOVO SERVER  
Sul nuovo server che ospiterà il repository, sarà necessario ricreare gli stessi utenti e gruppi presenti in quello di partenza:

root@enigma:/# useradd cvs  
root@enigma:/home# groupadd cvs

Quindi sarà necessario configurare il file inetd.conf al fine di impostare il server in ascolto, quindi riavviare il superdemone inetd:  
root@enigma:/# grep cvs /etc/inetd.conf
cvspserver stream tcp nowait root /usr/sbin/tcpd /usr/bin/cvs --allow-root=/home/cvs pserver

root@enigma:/home# /etc/rc.d/rc.inetd restart
Starting Internet super-server daemon:  /usr/sbin/inetd


Oppure nel caso si utilizzi xinetd:  
[root@vagante xinetd.d]# cat cvspersver  
{
        port           = 2401
        socket_type    = stream
        protocol       = tcp
        user           = root
        wait           = no
     passenv         = PATH
        server         = /usr/bin/cvs
    server_args       = -f --allow-root=/home/cvs/ pserver
}
  

[root@vagante etc]# /etc/rc.d/init.d/xinetd restart  
Stopping xinetd:                                           [  OK  ]  
Starting xinetd:                                           [  OK  ]
  

E' possibile verifcare se la configurazione è corretta, controllando che la porta 2401 sia in stato listen:  
root@enigma:/home/cvs# netstat -nat | grep 2401  
tcp        0      0 0.0.0.0:2401            0.0.0.0:*               LISTEN
  

Infine in caso di utilizzo, è possibile settare le policy di accesso tramite i file hosts.deny e hosts.allow:  
root@enigma:/home# grep cvs /etc/hosts.allow
cvs  : 192.168.0.


COPIA E SCOMPATTAZIONE REPOSITORY  
Una volta terminata la configurazione, è necessario creare il tar del contenuto del repository:  
root@Joker:/disco2# tar cvfz cvsjoker.gz cvs/  
cvs/  
cvs/CVSROOT/  
cvs/CVSROOT/Emptydir/  
cvs/CVSROOT/loginfo  
cvs/CVSROOT/loginfo,v  
cvs/CVSROOT/rcsinfo  
cvs/CVSROOT/rcsinfo,v  
cvs/CVSROOT/editinfo  
cvs/CVSROOT/editinfo,v  
cvs/CVSROOT/verifymsg  
cvs/CVSROOT/verifymsg,v  
cvs/CVSROOT/commitinfo  
cvs/CVSROOT/commitinfo,v  
...


Quindi è possibile trasferirlo  nuovo server:  
root@Joker:/disco2# scp cvsjoker.gz enigma:/home  
root@enigma's password: **********  
cvsjoker.gz          100%   |**************************************************************************************************************************| 15090 KB    00:35


Infine scompattare il file tar:  
root@enigma:/home# tar xvfz cvsjoker.gz  
cvs/  
cvs/CVSROOT/  
cvs/CVSROOT/Emptydir/  
cvs/CVSROOT/loginfo  
cvs/CVSROOT/loginfo,v  
cvs/CVSROOT/rcsinfo  
cvs/CVSROOT/rcsinfo,v  
cvs/CVSROOT/editinfo  
cvs/CVSROOT/editinfo,v  
cvs/CVSROOT/verifymsg  
cvs/CVSROOT/verifymsg,v  
cvs/CVSROOT/commitinfo  
...

  
A questo punto il repository è pronto per l'uso, non è necessario reinizializzare il repository in quanto i dati di configurazione del repository sono già presenti all'interno della directory CVSROOT. L'ultimo passo da compiere è solamente l'aggiornamento delle stringhe di connessione dei client al nuovo indirizzo.

CVS client per Windows
Autore: homer - Ultimo Aggiornamento: 2004-10-11 04:18:21 - Data di creazione: 2004-10-11 04:18:21
Tipo Infobox: ETCETERA - Skill: 2- JUNIOR

Tool ad interfaccia grafica per l'utilizzo del CVS in ambiente Windows.

Wincvs
Molto diffuso, è un vero e proprio client grafico in ambiente Windows per l'utilizzo del CVS. E' possibile compiere tramite interfaccia grafica, tutte le operazioni che normalmente si eseguirebbero da linea di comando, quali per esempio tag, branch, commit, update, ecc. E' possibile gestire facilmente la connessione a più CVS server differenti. Toolbar, ed un interfaccia curata, lo rendono abbastanza intuitivo da utilizzare.

TortoiseCVS
E' un client CVS con la caratteristica particolare di essere integrato con Explorer. E' quindi utilizzabile tramite un menu contestuale al quale si accede con il tasto destro del mouse, all'interno della cartella contenenti i sorgenti sui quali si lavora. I file modificati, vengono visualizzati con colori differenti, per facilitare l'utente. E' basato sul codice sorgente di WinCvs.

CVS Access Control List
Autore: homer - Ultimo Aggiornamento: 2004-07-15 22:39:52 - Data di creazione: 2004-07-15 22:39:52
Tipo Infobox: TIPS - Skill: 2- JUNIOR

CVSACL è una patch che permette di aggiungere le Access Control list ad un repository CVS.

Qualora si intenda dotare il proprio repository CVS di ACL è disponibile una patch, la quale aggiunge due nuovi comandi: acl e racl. Essa permette di definire controlli per moduli, directory, file, branch e tag.

La patch permette di utilizzare le ACL solamente mediante connessione remota. E' comunque possibile fare in modo che anche utente locale del sistema sia vincolato dal controllo settando un speciale variabile nella configurazione che forza l'utente ad utilizzare il CVS da remoto.

I comandi di gestione delle ACL non sono attualmente disponibili per client CVS grafici, ma in genere, dovendo essere eseguiti solo dal CVS Administrator, questo non rappresenta un problema.

Glossario CVS
Autore: homer - Ultimo Aggiornamento: 2004-07-15 22:45:21 - Data di creazione: 2004-07-15 22:45:21
Tipo Infobox: TIPS - Skill: 2- JUNIOR

Termini comuni utilizzati nell'utilizzo di un sistema CVS.

REPOSITORY: è la copia master dei sorgenti, che risiede sul server CVS, contiene la storia di tutte le modifiche dalla creazione alla cancellazione di ogni file di un progetto;
CHECK OUT: è l'operazione attraverso la quale, viene scaricata in locale una copia dei dati presenti nel repository;
WORKING COPY: rappresenta la copia di lavoro scaricata dal repository, solitamente in locale sul proprio computer, sulla quale ogni sviluppatore lavora;
COMMIT: è l'operazione attraverso la quale, i dati presenti nel repository vengono aggiornati con quanto modificato nella propria working copy;
UPDATE: è l'operazione attraverso la quale, i dati presenti nella working copy vengono aggiornati secondo le modifiche presenti nel repository. In questo modo è possibile aggiornare i propri file con le modifiche apportate dagli altri sviluppatori;
CONFLICT: un conflitto nasce quando due sviluppatori, modificano le stesse righe di un file;
REVISION: rappresenta il numero di revisione corrente, costantemente aggiornato ad ogni commit, di ogni file presente nel repository;
LOG MESSAGE: è il messaggio che viene archiviato nel momento in cui si esegue un commit in cui si specifica la descrizione dei cambiamenti effettuati;
TAG: rappresenta una sorta marchio temporale dei sorgenti. Viene utilizzato per poter avere un riferimento temporale, e permettere quindi più facilmente il recupero di una copia del progetto in un determinato istante fissato appunto dal tag;
MAIN LINE: è la linea principale di sviluppo di un progetto;
BRANCH: si tratta di un ramo di sviluppo parallelo a quello principale, utilizzato solitamente per i bug fix ma anche per portare avanti due diverse versioni di un progetto;
MERGE: quando si vuole terminare un branch e fonderlo con quanto presente nella mainline, tipicamente terminata l'operazione di bug fixing di una release, l'operazione prende il nome di merge.

ViewCVS: Overview, installazione ed uso
Autore: homer - Ultimo Aggiornamento: 2005-03-17 14:21:03 - Data di creazione: 2004-07-15 22:42:54
Tipo Infobox: DESCRIPTION - Skill: 3- INTERMEDIATE

ViewCVS è un tool scritto in Pyton, che permette di accedere via web ad un repository CVS, è possibile visualizzare i change logs, le revisioni dei file, ed effettuare il browse delle directory di un progetto, tutto questo in base ai tags oppure ai branchs definiti.

PREREQUISITI  
Per poter utilizzare ViewCvs è necessaria la presenza di alcuni software nel sistema:  
- Un web server per l'esecuzione dello script CGI che gestisce la visualizzazione;  
- Il linguaggio Pyton di versione 1.5 o superiore;  
- Il sistema RCS (Revision Control System) che viene utilizzato per tener traccia delle revisioni dei file;  

DOWNLOAD
Il download del pacchetto, può essere effettuato dal sito del progetto su SourceForge a questo indirizzo sourceforge.net/projects/viewcvs/:
root@Joker:/usr/local# wget --passive http://viewcvs.sourceforge.net/viewcvs-0.9.2.tar.gz   
--16:04:18--  http://viewcvs.sourceforge.net/viewcvs-0.9.2.tar.gz  
           => `viewcvs-0.9.2.tar.gz'  
Resolving viewcvs.sourceforge.net... done.  
Connecting to viewcvs.sourceforge.net[66.35.250.209]:80... connected.  
HTTP request sent, awaiting response... 200 OK  
Length: 140,063 [application/x-tar]  
100%[==================================================================================>] 140,063        4.24K/s    ETA 00:00  
16:04:52 (4.24 KB/s) - `viewcvs-0.9.2.tar.gz' saved [140063/140063]


SCOMPATTAZIONE  
Una volta terminato il download è possibile eseguire la scompattazione del pacchetto tar compresso con gzip:  
root@Joker:/usr/local# tar xvfz viewcvs-0.9.2.tar.gz  
viewcvs-0.9.2/  
viewcvs-0.9.2/cgi/  
viewcvs-0.9.2/cgi/cvsgraph.conf.dist  
viewcvs-0.9.2/cgi/granny.cgi  
viewcvs-0.9.2/cgi/query.cgi  
viewcvs-0.9.2/cgi/viewcvs.cgi  
viewcvs-0.9.2/cgi/viewcvs.conf.dist  
...  
viewcvs-0.9.2/website/upgrading.html  
viewcvs-0.9.2/website/who.html  
viewcvs-0.9.2/LICENSE.html


INSTALLAZIONE  
L'installazione viene effettuata tramite uno script fornito a corredo del software, il quale chiede di indicare la directory di installazione:  
root@Joker:/usr/local/viewcvs-0.9.2# ./viewcvs-install  
This is the ViewCVS 0.9.2 installer.  

It will allow you to choose the install path for ViewCVS.  You will  
now be asked some installation questions.  

Defaults are given in square brackets.  Just hit [Enter] if a default
is okay.

Installation Path [/usr/local/viewcvs-0.9.2]: /usr/local/viewcvs  
L'unica domanda posta dall'installer è il percorso in cui vogliamo il software  
Installing ViewCVS to: /usr/local/viewcvs  
  cgi/viewcvs.cgi  
  cgi/query.cgi  
  standalone.py  
  cgi/viewcvs.conf.dist  
  cgi/cvsgraph.conf.dist  
  lib/PyFontify.py  
  lib/blame.py  
  lib/compat.py  
  lib/config.py  
  lib/cvsdb.py  
...  
  website/help_logtable.html  
  website/images/logo.png  
  website/images/chalk.jpg  
  website/images/cvsgraph_16x16.png  
  website/images/cvsgraph_32x32.png  

Installation Complete


CONFIGURAZIONE POSTINSTALLAZIONE  
Terminata l'installazione è necessario copiare i file *.cgi presenti nella directory di installazione sotto /cgi/ in quella utilizzata dal Web server per l'esecuzione degli script:  
root@Joker:/usr/local/viewcvs/cgi# ls  
query.cgi  viewcvs.cgi  
root@Joker:/usr/local/viewcvs/cgi# cp *.cgi /usr/local/apache/cgi-bin/
  
A questo punto è d'obbligo una minima configurazione di base di attraverso la modifica di alcuni parametri nel file viewcvs.conf. In particolare:  
root@Joker:/usr/local/viewcvs# cat viewcvs.conf  
cvs_roots = Joker : /home/cvs  
# this is the name of the default CVS root.  
Dove risiede il repository  
default_root = Joker  
Quale repository visualizzare in case fossero più di uno  
# uncomment if the RCS binaries are not on the standard path  
#rcs_path = /usr/bin/  
# This address is shown in the footer of the generated pages.  
# It must be replaced with the address of the local CVS maintainer.  
address = <a href="mailto:[email protected]"> CVS admin Arnaldo aka Homer</a>  
L'amministratore del CVS   
# this title is used on the main entry page  
main_title = CVS Joker Repository   
Il titolo da visualizzare via Web
  

A questo punto è possibile accedere al repository in lettura all'indirizzo /cgi-bin/viewcvs.cgi/ del proprio webserver.

Usare CVS
Autore: valentino - Ultimo Aggiornamento: 2003-09-16 00:58:51 - Data di creazione: 2003-09-16 00:58:51
Tipo Infobox: DESCRIPTION - Skill: 3- INTERMEDIATE

Il pacchetto cvs deve essere installato sul sistema per essere configurato come server CVS.

La configurazione di server CVS prevede i seguenti passaggi:
1. Inizializzare il repository
2. Creare un gruppo utenti per il CVS
3. Aggiungere utenti al gruppo di utenti CVS
4. Modificare il gruppo per CVSROOT
5. Modificare i permessi su CVSROOT

L'inizializzazione del server CVS fa riferimento alla creazione della directory definita CVSROOT del server e al relativo popolamento con i file di configurazione del server e dei moduli. Come root, eseguite il seguente comando, dove /usr/local/CVS/ è il CVSROOT:
cvs -d /usr/local/CVS init

Questo comando crea la directory /usr/local/CVS/ sul server. In questa viene creata anche una directory chiamata CVSROOT. Si tratta di uno speciale modulo che contiene i file di configurazione per il repository. I file di questo speciale modulo non dovrebbero essere modificati direttamente sul server (l'unica eccezione è se si crea un file di password per l'autenticazione in modo tale che risulti impossibile intercettarli sulla rete e permetterne agli utenti di averne una copia locale).
Per modificare i file di configurazione, estraete una copia di lavoro del modulo CVSROOT su una macchina client, modificate i file e registratelo di nuovo nel repository.
A questo punto, aggiungete un gruppo di utenti a cui dovrebbero appartenere tutti gli utenti CVS validi:
groupadd cvs

Dopo, aggiungete tutti gli utenti che devono poter accedere al repository CVS al gruppo cvs in modo che possano avere i permessi di lettura e scrittura per il repository. Se gli utenti non esistono sul server, occorre inanzitutto crearli.
Cambiate il gruppo per tutti i file contenuti nella directory sul server designato come CVSROOT:
chgrp -R cvs /usr/local/CVS

Modificate i permessi di tutti i file di questa directory in modo che solo gli utenti apparteneni al gruppo possano accedere ai file:
chmod -R 770 /usr/local/CVS

Ora che il repository è configurato, è possibile importare i moduli.
Ricordate di eseguire il backup del repository sul server nel caso in cui si verifica qualche problema al filesystem sul server. Dato che i file di configurazione si trovano nella stessa directory degli altri file del repository, all'elenco di file di backup per il server deve essere aggiunta solo la directory CVSROOT.

Spostare un modulo in un repository differente
Per spostare un modulo su altro server, è necessario archiviare la directory corrispondente, trasferirlo sul nuovo server CVS e togliere dall'archivio il modulo nel CVSROOT del nuovo server. Per spostare l'intero repository, archiviate la directory CVSROOT e toglietala dall'archivio del nuovo server.

Configurazione del sistema client
Il pacchetto RPM cvs deve essere installato sui sistemi client.
Il tipo di configurazione di un sistema client che deve essere collegato ad un server CVS dipende dal server che intendete utilizzare e dal tipo di autenticazione adottata dal server. Le due variabili d'ambiente CVSROOT e CVS_RSH devono essere impostate ai valori corretti per il server. Se il server CVS è un sistema Red Hat Linux, impostate il CVSROOT sul sistema client aggiungendo la seguente riga al file  .bashrc in ciascuna directory home degli utenti CVS:
export CVSROOT:ext<yourusername>@cvs\
           server.example.com/path/to/servercvsroot

Sostituite <yourusername> con il nome utente per l'account CVS, sostituite cvsserver.example.com con il nome host del server CVS e infine sostituite /path/to/servercvsroot con la directory sulla directory root CVS presente sul server.

Un altro utile file di configurazione presente nella directory home di ciascun utente è il file .cvsrc, che contiene l'elenco dei comandi CVS con argomenti opzionali che possono essere utilizzati durante l'esecuzione dei comandi. Per esmpio, se desiderate visualizzare i file diff nel formato output unificato, aggiungete la riga seguente al file:
diff -u
          rdiff -u


Per creare delle directory che esistono nel repository ma non nella vostra copia di lavoro e per rimuovere delle directory della vostra copia di lavoro nel caso in cui la directory contenuta nel rpository non contenga file al momento in cui viene eseguito il comando cvs update, aggiungete al file :
update -dP
L'opzione -d specifica che è possibile creare delle directory se queste vengono aggiunte al repository, e -P rappresenta l'opzione che consente l'eliminazione delle directory vuote.

Importazione di moduli CVS
Prima di importare i file per un nuovo modulo nel repository (server), verificate il modulo CVSROOT e aggiungete una voce per il nuovo modulo nel file modules:
cvs checkout CVSROOT

Questo comando consente la creazione della directory CVSROOT nella directory corrente, producendo così una copia del lavoro del modulo. Modificate il file modules nella directory appena creata per dichiarare il nuovo modulo. Ogni riga del file è una dichiarazione del modulo del formato:
modulename dir/to/module
dir/to/module è relativo alla directory root CVS contenuta nel repository. Ad esempio, per aggiungere un modulo definito myproject, aggiumgete la riga
myproject               myproject
al file modules. Dopo avere aggiunto il modulo registrate ail file modules nel repository:
cvs commit -m "add myproject module" modules

A questo punto, importate il file per il modulo. Utilzzate la directory che contiene i file da aggiungere al nuovo modulo. Tutti i file vengono copiati sul server, quindi accertatevi che nella directory corrente siano presenti solo i file che desiderete importare. Per importare i file eseguite il comando:
cvs import  -m "initial import" myproject/ <vendor-tag> <relase-tag>

Sostituite <vendor-tag> con il nome della vostra società e le vostre iniziali. Sostituite <relase-tag> con un numero di versione.
Il comando import copia tutti i file presenti nella directory corrente sul server nella directory relativa al modulo.
Nell'esempio, il nome del modulo e quello della directory relativa alla directory root CVS sono identici, sebbene non sia indispensabile.
Con l'importazione dei file per un modulo, la directory corrente non diventa automaticamente una directory modificabile per il modulo. Estraete il modulo dal server prima di modificare ulteriormente i file. E' consigliabile tenere una copia dei file del modulo importati nel CVS fino a quando non viene verificato che il modulo contenga tutti i file necessari.

Estrazione di un modulo
Per estrarre un modulo eseguite il secondo comando dove <module-name> è il nome del modulo:
cvs checkout <module-name>

Per default, nella directory corrente viene creata una directory avente lo stesso nome del modulo, e tutti i file del modulo vengono scaricati nella directory.
Per specificare il nome della directory, utilizzate il comando seguente:
cvs co -d <directory> <module-name>
Nota che il comando è abbreviato.

Registrazione dei file
Per salvare le modifiche apportate a un file nella copia di lavoro di un modulo, registrate il file nel repository. Per stabilire cos'è cambiato nella copia di lavoro del file, usate il comando:
cvs diff <filename>
Verrano visualizzate le differenze tra il file della vostra copia di lavoro e l'ultima revisione del file nel repository.
Per rendere effettive le modifiche usate il comando:
cvs commit -m "some log message" <filename>
Sostituite some log message con un messagio di log che descriva la modifica in modo da ricordare perchè sia stata necessaria.
Se il comando commit viene eseguita specificando il nome del file, tutti i file modificati nella directory corrente e le sottodirectory vengono riposti nel repository, inclusi i file aggiunti con il comando cvs add e quelli eliminati con cvs remove, in altre parole il comando è ricorsivo.
Per specificare nomi di file multipli è possibile utilizzare wild card. Ad esempio:
commit -m "some log message" *.c

Questo permette di registrare nella directory corrente qualsiasi file modificato o aggiunto con il comando cvs add che termina con l'estensione .c. Le wild card non sono ricorsive e non includono file che devono essere rimossi con il comando cvs remove. Per confermare la rimozione di un file, questo deve essere esplicitamento specificato con il comando cvs commit.
Se non viene specificato un messaggio di log con il comando cvs commit, verra avviato l'EDITOR di default, digitate un messaggio di log e salvate il file per completare il processo di registrazione.

Aggiornamento dei file
Dato che il CVS è un sistema multiutente è indispensabile poter acceder ai file agggiornati da altri utenti. Nella directory che contiene la copia di lavoro del modulo, eseguite:
cvs udate
in modo da recuperare i file più recenti dal repository. I file aggiunti nel repository vengono eliminati nella copia di lavoro e i file modificati nel repository sono aggiornati nella copia di lavoro. Se la copia di lavoro contiene un file che è stato modificato localmente ma non è ancora registrato, e lo stesso file è stato modificato nel repository perchè un altro utente ha effettuato una modifica dopo l'ultimo aggiornamento della copia di lavoro, il file locale viene aggiornato con le modifiche del repository. Se la correzione non viene effetuata in modo corretto (ad es. lo stesso contenuto è stato modificato a livello locale e nella revisione del repository), i messaggi CVS mostrano la presenza di conflitti di file. In seguito vedremo il da farsi.

Aggiunta di file
Se si aggiunge un file alla copia di lavoro di un modulo, la volta successiva in cui le modifiche vengono registrate, il nuovo file non verrà automaticamente aggiunto nel repository sul server CVS. Occorrerà eseguire il comando:
cvs add <filename>
e dopo l'esecuzione con il comando cvs commit il file verrà effetivamente incluso nel repository.

Rimozione dei file
Analogamente a quanto visto per l'aggiunta di un file, per rimuovere un file utilizzeremo il comando:
cvs remove <filename>

Dopo la relativa registrazione il file viene spostato nell'Attico del repository sul server. Le revisioni precedenti del file vengono conservate sul server ma il file viene rimosso dalla copia di lavoro di ciascun utente quando questo aggiorna i file con le ultime revisioni. Il file può essere recuperato dall'Attico in qualsiasi momento e aggiunto alla lista dei file attivi per il repository.
Quando si registra la rimozione è necessario specificare il nome esatto del file, anche la mancata specificazione del file ne determina la rimozione ma verrano registrate anche tutte le altre modifiche.
Non è possibile utilizzare wild chard per specificare i file da rimuovere.

Utilizzo dei rami
Il modulo CVS e' paragonabile a un albero. La versione iniziale del modulo e' definita TESTA e forma il tronco dell'albero. Proprio come gli alberi anche un modulo CVS puo' avere dei rami. Il modulo puo' essere spezzato in piu' rami, il cui sviluppo puo' continuare senza intaccare la TESTA del modulo. Un modulo puo' avere piu' di un ramo che poggia sulla TESTA ed e' possibile far nascere rami nuovi da quelli gia' esistenti.
Utilizzando la directory che contiene la copia del lavoro del modulo per creare un ramo utilizziamo il comando:
cvs tag -b <branchname>

Sostituite <branchname> con il nome del ramo. Questo comando non trasforma la directory corrente in una copia di lavoro del ramo. La copia di lavoro non subisce alterazioni.
Dopo la creazione del ramo, scaricatelo con il comando:
co -d <directory> -r <branchname> <module-name>

Sostituite <directory> con la directory (relativa alla directory corrente) nella quale volete creare la copia di lavoro del ramo, <branchname> con il nome del ramo e <module-name> con il nome del modulo.

Unione dei rami
E' possibile unire un ramo a un altro ramo dello stesso modulo (oppur unire un ramo el testa). Ad esempio, per unire il contenuto del ramo A nel ramo B, modificate le directory sulla copia di lavoro del ramo B ed eseguite il comando:
cvs update -j <branchname>

dove <branchname> e' il nome del ramo A.
Questo comando non registra le modifiche nel repository ma solo le copie locali dei file.Se si verificano dei conflitti con l'operazione di unione, verrano visualizzati dei messaggi che indicano quali sono i file interessati. Provate a risolvere i conflitti(in seguito vedremo come) e registrate le modifiche nel repository.

Visualizzazione dello stato dei file
E' possibile visualizzare lo stato dei file in qualsisi momento con il comando:
cvs status <filename>

Potremo visualizzare quanto segue:

Up-to-date
La revisione del file nella copia di lavoro e' identica all'ultima revisione relativa al ramo nel repository.
Locally Modified
Il file e' stato aggiornato all'ultima revisione per il ramo, ma e' stato modificato  nella copia di lavoro locale.
Locally Added
Il file e' stato aggiunto a livello locale ma non e' stato ancora aggiunto al repository sul server.
Locally Removed
Il file e' tato rimosso dalla copia di lavoro ma la rimozione non e' ancora registrata sul server.
Needs Checkout
Una revisione piu' recente del file si trova sul server e deve essere recuperata, quindi dovremo aggiornarlo con il comando cvs update.
Needs Patch
La revisione della copia di lavoro necessita di una patch per essere l'ultima revisione sul server.Utilizzate il comando cvs update per risolvere il problema.
Needs Merge
Sul server esiste una revisione piu' recente del file e la copia di lavorocontiene modifiche non ancora registrate.Questo stato e' tipico quando l'ultima revisione del file non e' stata scaricata sebbene il file sia stato comunque modificato.
File had conflicts on merge
E' simile a Needs Merge salvo il fatto che non possono essere risolte dopo il comando cvs update
Unknown
Il server CVS non sa nulla di questo file. Non e' stato aggiunto ne' rimosso a livello locale e non mai stato registrato sul server.

Per daterminare il ramo e i nomi tag di un file di un determinato modulo, eseguite il comando:
cvs status -v <filename>

Per visualizzare i messaggi di log per un file, eseguite il comando:
cvs log <filename> | less

Risoluzione dei conflitti

Se modificate un file e lo stesso contenuto viene modificato da un altro utente e registrato per primo, probabilmente comparira' un messaggio simile a questo:
RCS file: /usr/local/DOCCVS/docs/module-name/filename,v
retrieving revision 1.12
retrieving revision 1.13
Merging differences between 1.12 and 1.13 into filename
rcsmerge: warning: conflicts during merge
cvs server: conflicts found in filename C filename


Per risolvere il conflitto, aprite il file nell'editor di testo preferito, eseguite una ricerca di <<<<<<< e determinate qulae revisione del contenuto deve esssere inclusa nell'ultima revisione del file CVS.Per esempio:
Some line
<<<<<<< filename
This line was changed in your working copy.
=======
This is the same line changed and alredy commited.
>>>>>>> 1.13

Il contenuto tra <<<<<<< e ======= e' la riga modificata nella copia di lavoro. Il contenuto tra ======= e >>>>>>> e' il contenuto incluso nell' ultima revisione del server CVS.E' possibile risolvere il conflitto determinando quale riga dovrebbe trovarsi nel repository e registrando il file.

Interfaccia Web

Se preferite un'interfaccia web al CVS, potete installare ViewCVS, disponibile all'indirizzo http://viewcvs.sourceforge.net.

CvsGraph: Overview ed installazione
Autore: homer - Ultimo Aggiornamento: 2005-10-18 22:26:08 - Data di creazione: 2005-10-11 12:54:54
Tipo Infobox: DESCRIPTION - Skill: 2- JUNIOR

Rappresentazione grafica delle revisions e dei branch di un repository CVS.

OVERVIEW
CvsGraph è una piccola utility che si basa sulle librerie GD per la rappresentazione grafica delle modifiche apportate ad un repository CVS. L'ispirazione per la sua crazione è nata dal tool WinCVS che aveva tra le proprie caratteristiche questa possibilità. Sebbene possa essere utilizzata anche a linea di comando, il suo principale uso avviene dietro le quinte del tool ViewCVS che permette di visualizzare un repository via Web. E' rilasciata sotto licenza GNU GPL.

DOWNLOAD, SCOMPATTAZIONE E INSTALLAZIONE
E' possibile scaricare il software presso il sito dell'autore: http://www.akhphd.au.dk/~bertho/cvsgraph/.

La procedura di installazione è semplice:
root@enigma:/software# wget http://www.akhphd.au.dk/~bertho/cvsgraph/release/cvsgraph-1.5.2.tar.gz Download
homer@enigma:/software$ tar xvfz cvsgraph-1.5.2.tar.gz Scompattazione
homer@enigma:/software$ cd cvsgraph-1.5.2
homer@enigma:/software/cvsgraph-1.5.2$ ./configure Configurazione
homer@enigma:/software/cvsgraph-1.5.2$ make Compilazione


A questo punto è possibile copiare l'eseguibile creato in un percorso presente nel path di sistema, in modo che questo sia disponibile ad applicativi ed utenti, come per esempio /usr/bin:
homer@enigma:/software/cvsgraph-1.5.2$ ls -ltr cvsgraph
-rwxr-xr-x  1 homer users 314463 2005-10-18 16:35 cvsgraph*
homer@enigma:/software/cvsgraph-1.5.2$ sudo cp cvsgraph /usr/local/bin/

Privacy Policy