CVS Il Concurrent Versions System (CVS) fornisce un framework dove molteplici utenti possono editare gli stessi files. Come puoi immaginare, se un gruppo di utenti edita i files in una singola directory, il caos regnerà. Usando CVS, comunque, un gruppo di persone può lavorare con sicurezza sullo stesso gruppo di files. CVS mantiene la copia master dei files, e registra chi ha cambiato cosa e quando in un depositorio centrale. Se insorgessero dei conflitti, CVS te lo farà sapere. CVS è spesso usato affinchè i programmatori possano condividere codice, ma funziona bene anche per la documentazione. cvs
Come funziona CVS cvs come funziona cvs descrizione In molti casi, ogni gruppo di files che costituisce un pacchetto o un progetto è immagazzinato come modulo sul CVS server. Quando lavori con i files dal CVS, dovrai eseguire il checkout di una copia del modulo sul file system locale. Dopo aver modificato uno o più files, dovrai inviarli con un commit al repositorio centrale CVS server. Con CVS puoi editare un file senza prima ottenere il permesso o il locking del file. La parte concurrent del nome CVS viene dalla sua capacità di permettere diverse differenti persone di editare differenti parti dello stesso file. Siccome nessuno dei cambiamenti si sovrappone, CVS può registrare correttamente i loro cambiamenti. In caso di cambiamenti duplicati, questi sono marcati chiaramente nei files e gli autori devono risolvere il problema da soli. Quando commetti i cambiamenti, solo i cambiamenti ai files che il server sa sono commessi. In altre parole, se crei un file nel checkout locale di un modulo, il nuovo file non è automaticamente inviato al server. Devi prima fare un add del file al repositorio quindi eseguire il commit. Se rimuovi un file dal tuo checkout locale di un modulo, dovrai specificare che vuoi rimuoverlo dal repositorio sul CVS server e quindi eseguire il commit della rimozione del file. I comandi specifici per eseguire queste operazioni sono discussi in . Se qualcuno ha modificato il file nel tempo fra intercorso fra l'ultima volta che l'hai catturato dal CVS e quando hai provato ad eseguire il commit di un cambiamento, CVS proverà ad incollare i cambiamenti alla copia master sul CVS server. Se il contenuto che hai cambiato è in una locazione differente nel file rispetto la contenuto cambiato da qualcun'altro, l'azione del commit andrà avanti senza alcun conflitto. Se qualcuno modifica lo stesso contenuto che hai già cambiato tu e provi a fare un commit, vedrai un messaggio che è avvenuto il conflitto su un file. Così, dovrai fare l' update dei tuoi files di frequente. E' una buona pratica aggiornarli prima di iniziare a modificarli. Fa riferimento a per le istruzioni su come risolvere i conflitti.
Preparazione all'uso di CVS cvs preparazione all'uso Prima di usare CVS, hai bisogno di stabilire un account con il CVS server. Dopo aver ottenuto un account, non dovrai più fare nuovamente queste cose.
E' CVS installato sul tuo sitema cvs installazione RPM Devi aver installato il pacchetto CVS RPM. Verifica la sua presenza digitando il comando: $ rpm -q cvs e vedi un output simile a cvs-1.11.19-1, allora il pacchetto è installato. Un messaggio simile a package cvs is not installed vuol dire che devi installare il pacchetto cvs prima di continuare. Se non sai come fare, consulta il tuo amministratore di sistema che potrà installarlo per te.
Generazione dell chiavi SSH OpenSSH chiavi di autorizzazione Il CVS server usa chiavi SSH Protocol 2 per autenticare gli utenti. Così, devi generare un paio di chiavi prima di richiedere un account CVS. Se hai già una chiave SSH DSA, puoi saltare questo passaggio. Tip Hai già una chiave DSA se hai il file ~/.ssh/id_dsa.pub sul sistema. Se la tua chiave DSA esistente non richiede una passphrase, sei fortemente incoraggiato a generarne una che richieda una passphrase. Usa i seguenti passi per generare una chiave DSA usata da SSH Protocol 2. E' necessaria per un account CVS su cvs.fedora.redhat.com. OpenSSH ssh-keygen ssh-keygen Per generare una chiave DSA per funzionare con il protocollo versione 2.0, allo shell prompt, digita il comando: $ ssh-keygen -t dsa Accetta la posizione predefinita per la locazione del file ~/.ssh/id_dsa. Sei fortemente incoraggiato all'urgenza di definire ed usare una passphrase per aumentare la sicurezza della tua chiave. Immetti una passphrase differente dalla password del tuo password e confermala reinserendola nuovamente. Copia la nuova chiave nel file corretto digitando i seguenti comandi allo shell prompt. $ cat ~/.ssh/id_dsa.pub>>~/.ssh/authorized_keys Controlla con attenzione questo comando prima di premere il tasto ENTER. Se ~/.ssh/authorized_keys esiste già, i contenuti di ~/.ssh/id_dsa.pub verranno appesi alla fine del file ~/.ssh/authorized_keys. Cambia i permessi della tua directory ~/.ssh e delle tue chiavi con i comandi: $ chmod 755 ~/.ssh $ chmod 644 ~/.ssh/authorized_keys Tip Puoi far si che il sistema ricordi la passphrase così da non doverla digitare ogni volta che accedi al CVS server. Fa riferimento alla documentazione del programma ssh-add.
Configurazione per l'accesso CVS cvs configurazione per l'accesso cvs CVSROOT cvs CVS_RSH CVSROOT CVS_RSH cvs .cvsrc .cvsrc
Evitare digitazioni ripetitive cvs evitare digitazioni ripetitive Molti comandi CVS hanno bisogno di certe opzioni per operare in modo consistente. Invece di digitarle ogni volta che il comando è usato, puoi salvare gli switches in un file che CVS leggerà prima di eseguire la linea di comando. Crea un file chiamato ~/.cvsrc nella tua home directory. Dovrà contenere i seguenti comandi, uno per riga: cvs -z3 diff -uNp rdiff -uNp update -dP
Configurare un accesso CVS Read-Only cvs configurare un accesso Read-Only cvs accesso anonimo Se il tuo obbiettivo è scaricare i vari documenti &FC; e renderizzarli sul tuo sistema, hai bisogno solo di un accesso read-only al depositorio CVS. Segui le istruzioni in questa sezione quindi salta direttamente a . Cambia directories dove vuoi che vengano collocati i files dal CVS, ed esegui i seguenti comandi: $ export CVSROOT=:pserver:cvs.fedora.redhat.com:/cvs/docs $ cvs login $ cvs checkout docs-common module-name $ cvs checkout module-name $ cd module-name Una volta eseguito il check-out del modulo, non importa quale CVSROOT è impostata perchè è registrata nel file CVS/Root per ogni directory nel tuo depositorio locale. Finchè la tua directory di lavoro ha una directory CVS/, il programma CVS localizzerà automaticamente il repositorio &FC;.
Configurazione accesso CVS Read/Write cvs configurazione accesso read/write cvs configurare gli accessi per gli autori Per scrivere un nuovo documento o modificarne uno esistente, devi ottenere pieno accesso read/write al repositorio CVS della Documentazione di &FC;. Per i dettagli completi su questo procedimento, fa riferimento al sito web http://fedoraproject.org/wiki/DocsProject/NewWriters . Segue un sommario: Sottoscriviti alla fedora-docs-list , che è il forum principale del progetto. Genera una chiave GNU Privacy Guard (GPG) per identificarti nel progetto. Registrati per un account in Bugzilla , se non ne hai già uno. Bugzilla è il modo con cui teniamo traccia degli errori, cambiamenti e progetti. Posta un auto introduzione alla lista. Dopo che la tua auto introduzione è stata approvata il tuo accesso CVS verrà garantito. Ogni autore, e questo ti include una volta che la tua auto introduzione è stat ricevuta, ha un unico $CVSROOT per accedere al repositorio CVS: $ export CVSROOT=:ext:yourname@cvs.fedora.redhat.com:/cvs/docs $ export CVS_RSH=/usr/bin/ssh Con le variabili ambiente $CVSROOT e $CVS_RSH impostate, puoi accedere al repositorio: $ cvs co -c Ti verrà richiesta la passphrase per la tua chiave SSH. Premi ENTER e riceverai la lista dei moduli presenti nel repositorio.
Comandi CVS di base cvs comandi Dopo aver configurato il sistema per funzionare con CVS, esegui il checkout dei moduli su cui lavorerai. Tip Per vedere se hai impostato correttamente la variabile $CVSROOT, o lo switch della linea di comando repository, vedi se hai una subdirectory CVS/ nella tua directory di lavoro. Se hai una directory CVS/, CVS ignorerà qualsiasi $CVSROOT o switch della linea di comando .
Fare il checkout dei moduli cvs eseguire il checkout dei moduli Devi fare il checkout di un modulo una volta. Dopo che la copia del modulo è sul tuo sistema, è sul tuo sistema. Per fare il checkout di un modulo, usa il seguente comando: $ cvs co <module-name> Per esempio, per fare il checkout del modulo example-tutorial, cambia la tua directory di lavoro, ed esegui il seguente comando: $ cvs co example-tutorial Verrà creata una directory chiamata example-tutorial/ nella directory corrente. Se non viene specificato un nome del ramo durante il checking del modulo, verrà riferito al HEAD del modulo CVS.
Fare il checkout dei rami dei moduli cvs eseguire il checkout dei moduli eseguire il checkout dei rami Pensa ad un ramo CVS come una versione dei files per una particolare versione del pacchetto o manuale. Per fare il checkout di un ramo di un modulo, usa il seguente comando: $ cvs co <directory> <branchname> <module-name> Una directory chiamata <directory> viene creata, ed i files per il ramo <branchname> del modulo <module-name> sono copiati nella directory. Per esempio, per fare il checkout di un ramo denominato BRANCH-VERSION-1.2 dal modulo mymodule, usa il comando: $ cvs co -d mymodule-1.2 -r BRANCH-VERSION-1.2 mymodule Verrà eseguito il checkout del ramo BRANCH-VERSION-1.2 del modulo nella directory mymodule-1.2 sul tuo sistema. Per determinare quale ramo e tags esiste per un file, usa il comando: $ cvs status <filename> Per esempio, lo status del file foo.sgml è il seguente: =================================================================== File: foo.sgml Status: Up-to-date Working revision: 1.47 Repository revision: 1.47 /cvs/docs/custom-guide/rhl-cg-en.sgml,v Sticky Tag: (none) Sticky Date: (none) Sticky Options: (none) Existing Tags: BRANCH-VERSION-1.2 (branch: 1.25.2) Solo dei tags marcati come rami nella seconda colonna sotto la sezione Existing Tags si può eseguire il checkout come ramo.
Aggiornare i files cvs aggiornare i files Per ricevere l'ultima versione di un file in un modulo, cambia nella directory che contiene i files per il modulo ed esegui il comando: cvs update Le ultime versioni di tutti i files ne modulo sono scaricate nella tua copia locale. Se noti un conflitto di file, fa riferimento a .
Eseguire il commit dei files cvs eseguire il commit dei files Dopo aver modificato i files nella tua versione locale di un modulo, esegui il commit per salvare i cambiamenti sul CVS server: $ cvs commit "alcuni messaggi di log" filename Se preferisci scrivere il tuo messaggio di log con il tuo editor di testo preferito, come definito dalla variabile ambiente $VISUAL o $EDITOR, ometti semplicemente la -m "alcuni messaggi di log". Il buffer conterrà già alcuni commenti che descrivono i cambiamenti; non è necessario cancellarli quando inserirai il tuo testo. I messaggi di log dovranno essere più descrittivi possibile affinchè chiunque altro lavori al modulo capisca cos'è stato cambiato. Usare un messaggio di log tipo aggiornati alcuni files non descrive accuratamente cosa è stato cambiato e non ti aiuterà in futuro. Se hai corretto un errore, fa riferimento a Bugzilla. Il <filename> può essere un filename, una serie di filenames separati da spazi, o un gruppo di filenames specificati usando una wildcards tipo *.png o foo-*.sgml. Se nessun filename o gruppo di filenames è specificato nel comando commit, tutti i cambiamenti eccezionali di qualsiasi tipo sono commessi al server. Il comando è recursivo ed includerà i cambiamenti in ogni subdirectories del modulo. Usa cautela quando esegui il comando commit senza nessun filenames poichè potresti non ricordare esattamente quali files sono cambiano. Se noti un conflitto di file, fa riferimento a .
Aggiungere files cvs aggiungere files Per aggiungere un file ad un modulo, crea il file sulla tua copia locale quindi esegui il seguente comando: $ cvs add file-to-add Dopo aver aggiunto il file, devi eseguire un commit dell'add per copiarlo sul server: $ cvs commit "qualche messaggio di log" file-da-aggiungere
Amministrare i files binari cvs files binari I files comunemente più archiviati sono di semplice testo ma qualche volta sono archiviati anche files binari. Il programma cvs determina le estensioni dei files più comuni tipo .png o .jpg, così di solito cvs "fa la cosa giusta". Quando si esegue il checkout della copia di un file del repositorio, il cvs lo scansisce per parole chiavi speciali, tipo "$id:$" e sostituisce le stringhe con un valore generato, tipo il numero di versione del file. Questa sostituzione di keyword di solito corrompe i files binari, così deve essere disattivata se cvs non riconosce i tuoi files come binari. Per marcare il tuo file come binario, e quindi disattivare l'espansione delle keyword, usa il comando: $ cvs filename Nota che il file deve già essere nel repositorio CVS prima di poter usare il comando . Questo è OK, fino a che l'espansione delle keyword è fatta appena il file viene sottoposto a checkout e copiato nella directory locale, non quando il file viene commesso al repositorio. Ripristinare un file binario Se esegui il check di un file binario nel repositorio e trovi che sia corrotto durante il checkout, non aver paura. Usa semplicemente il comando come descritto sopra, cancella la tua copia locale del file, ed esegui nuovamente il checkout.
Rimuovere i files cvs rimuovere i files Se un file non è più necessario nel modulo, usa il comando remove per rimuoverlo dalla tua copia locale poi esegui il commit per rimuoverlo dal server. Anche se il file è rimosso dalla versione corrente del modulo, una copia archiviata è ancora lasciata sul server e può essere recuperato in qualsiasi momento con il comando add. $ cvs rm -f file-to-remove Dopo la rimozione del file, devi eseguire il commit della rimozione: $ cvs commit "qualche messaggio di log" file-da-rimuovere Non puoi usare wildcards nel eseguire il commit per identificare files rimossi. Essi devono essere specificati con il nome di file esatto. Se necessiti di rinominare un file, è meglio rinominarlo sul CVS server affinchè la storia del file possa essere preservata. Se hai bisogno di rinominare un file, manda un email a cvsdocs-administrator@fedora.redhat.com chiedendo di voler rinominare un file.
Status dei files cvs status dei files Qualche volta è necessario vedere lo status di un file in un modulo CVS. Per vedere lo status di un file, usa il comando: $ cvs status filename Il rapporto dello status di un file nel repositorio è come segue: Up-to-date La tua revisione del file è identica all'ultima revisione sul CVS server. Locally Modified Hai aggiornato il file all'ultima versione dal server, ma poi hai modificato il file sul tuo sistema. Locally Added Hai aggiunto il file con il comando cvs add ma non hai ancora eseguito il commit per l'aggiunta del file. Locally Removed Hai rimosso il file con il comando cvs remove ma non hai ancora eseguito il commit per la rimozione. Needs Checkout Sul server c'è una nuova versione del file ed necessita di essere recuperata. Anche se lo status include la parola checkout, vuol dire che hai bisogno di aggiornare i files con il comando cvs update. Needs Patch La revisione del tuo checkout locale necessita di una patch per essere l'ultima versione dal server. Esegui il comando cvs update per risolvere. Needs Merge Esiste una nuova revisione sul server e la tua versione di copia locale contiene modifiche di cui non hai fatto ancora il commit. Questo status di solito avviene se non hai l'ultima revisione del file ed lo editi lo stesso. File had conflicts on merge Simile a Needs Merge, eccetto che quando hai provato ad eseguire il comando cvs update, le differenze non potevano essere risolte automaticamente. Fa riferimento a per maggiori informazioni sulla risoluzione dei conflitti. Unknown Il CVS server non sa nulla su questo file. Il file non è stato aggiunto ne rimosso localmente e non è mai stato commesso al server. Questo status di solito sussiste per i files che di cui non vorresti fare il commit al CVS tipo i generated-index.sgml o per quei files che vorresti aggiungere al repositorio ma dei quali non hai ancora impartito il comando cvs add.
Risoluzione dei conflitti cvs risoluzione dei conflitti Se modifichi un file e la stessa regione è modificata da qualcun'altro che esegue il commit prima di te, probabilmente vedrai un messaggio simile al seguente quando eseguirai il commit o l'aggiornamento della tua copia locale del modulo: RCS file: /cvs/docs/module-name/filename.sgml,v retrieving revision 1.12 retrieving revision 1.13 Merging differences between 1.12 and 1.13 into filename.sgml rcsmerge: warning: conflicts during merge cvs server: conflicts found in filename.sgml C filename.sgml Per risolvere il conflitto, apri il file, cerca <<<<<<< e determina quale versione del contenuto è corretta. Per esempio: <para> Some sentence. <<<<<<< filename.sgml A sentence that was changed in the working copy. ======= A same sentence that was changed differently and committed. >>>>>>> 1.13 </para> Il contenuto fra le <<<<<<<, e le ======= è il contenuto della tua copia di lavoro. Il contenuto fra le ======= e le >>>>>>> è il contenuto dal server. Risolvi il conflitto editando la tua copia, ed esegui il commit del file.
Sommario cvs comandi sommario di Tutti i comandi assumono che tu sia nella directory appropriata per il modulo CVS. Comandi CVS di base Commando Descrizione cvs checkout <module-name> or cvs co <module-name> Crea una directory chiamata <module-name> con il contenuto del modulo nella directory cvs co -d <directory> -r <branchname><module-name> Crea la directory <directory> con i contenuti del ramo <branchname> del modulo <module-name> cvs update or cvs up Aggiorna i tuoi files con gli ultimi files dal CVS server cvs add <filename> Aggiunge un nuovo file "filename" al CVS server cvs commit -m "My message" <filename> Aggiorna il file <filename> con l'ultima copia proveniente dal tuo computer cvs log <filename> Mostra i messaggi di commit per il file <filename> cvs status <filename> Mostra lo status del file, tipo Locally Modified cvs status -v <filename> Mostra i tags esistenti ed i rami per il file cvs diff <filename> Mostra la differenza della copia di lavoro del file e l'ultima versione del file per il ramo cvs diff -r1.1 -r1.2 <filename> Mostra la differenza fra le versioni 1.1 e 1.2 per il file
Per maggiori informazioni, leggi il manuale CVS disponibile sul tuo sistema in /usr/share/doc/cvs-<version-number>/cvs.ps (la versione CVS può cambiare) e visita la pagina web di CVS disponibile su http://www.cvshome.org/. Tip Poichè CVS usa ssh per connettersi al CVS server, ti verrà richiesta la password prima di eseguire una richiesta CVS. Se vuoi configurare la tua macchina affinchè tu non abbia più bisogno di inserire la password, fa riferimento a &RH; Linux 9 Customization Guide per i dettagli sull'uso di ssh-agent.