== SVN cosa è? SVN e' un sistema di archiviazione delle versioni o, se preferisci, un sistema di gestione delle revisioni. == Glossario Revision Control System : Sistema di gestione delle revisioni Repository : Deposito == Perché archiviare tutte le versioni di un progetto? 0 per poter recuperare facilmente una versione precedente del lavoro 0 per documentare quanto viene fatto 0 per non dover creare N file di backup ogni volta che si effettua un cambiamento per correggere o aggiungere nuove funzioni == Cosa tenere nel repository? Tipicamente i sorgenti e tutto quello che è utile per ripristinare un progetto su una nuova installazione, quindi sovente anche i file binari delle icone, i pdf della documentazione del lavoro, etc. Dove questi sistemi rendono maggiormente è proprio nella archiviazione dei sorgenti e dei file di testo. Siccome i file HTML sono di fatto sorgenti e testi, anche i file HTML, JS, CSS possono essere gestiti bene in un archivio SVN, il problema è organizzare bene le directory in modo da permettere un facile ritrovamento di quanto cercato. == Creazione di un repository subversion: svnadmin create $nome_repository Dove $nome_repository e' il nome che si vuole scegliere, e il comando creerà una directory omonima con dentro quello che serve per funzionare. Si puo' decidere di avere un repository per ogni progetto o avere un repository unico per tutti i progetti o una combinazione. L'importante è ricordare dove stanno i sorgenti che si cercano. Si può accedere ad un repository in vari modi, il repository può essere remoto e si può accedere ad esso ad esempio via ssh. == Come inserire un progetto nuovo La struttura suggerita dal libro su subversion e' la seguente: mkdir -p tmp/progetto/tags tmp/progetto/trunk tmp/progetto/branches svn import tmp file:///$percorso_repository poi si estrae dall'archivio una copia di lavoro e qui si iniziano a creare i file: svn co file:///$percorso_repository $nome_dir_locale dove $nome_dir_locale e' il nome della directory dove vogliamo estrarre il progetto. E' anche possibile importare tutti i sorgenti di un progetto (a patto che si abbiano i permessi sul file system per accedere in lettura a tutti i file necessari: svn import directory_da_mettere_nel_repository file:///$percorso_repository/trunk svn list file:///$percorso_repository/trunk ci conferma l'avvenuta archiviazione. 0 se c'e' tutto e non ci sono stati errori: 00 rm -rdf directory_messa_nel_repository 00 svn co file:///$percorso_repository/trunk directory_messa_nel_repository Per iniziare a usare il sistema è necessario estrarre una copia di lavoro e solo da lì sarà possibile archiviare le modifiche. Da notare che utenti diversi possono avere ciascuno una propria copia di lavoro, SVN e gli altri strumenti simili permetteranno ad essi di collaborare nella realizzazione del progetto limitando e gestendo i conflitti sui file a patto che tutti gli sviluppatori seguano norme minime come quella di archiviare con una buona frequenza le modifiche e di aggiornare la propria copia prima di iniziare nuove modifiche sui file. == Ho modificato uno o più file come archivio le modifiche? I file nuovi vanno aggiunti: svn add nome_file1, nome_file2, ... ogni file può avere un proprio percorso nel file system che va specificato ma deve essere contenuto già nelle sub directory della copia dell'archivio estratta (tramite il checkout [co per gli amici]). svn commit invia all'archivio le modifiche Attenzione che i file eventualmente da rimuovere vanno rimossi prima dall'SVN con il suo comando remove [rm per gli amici] e poi eventualmente dal filesystem. svn co svn+ssh://tuonomeutente@goose.bussolino.com/var/lib/SVN_REPOSITORY/projects/dtv/auditel/trunk projects/dtv/auditel per estrarre il progetto auditel dal repository su goose, ma nota bene: il tuo utente deve potersi collegare a goose via ssh tramite autenticazione con chiave dsa/rsa e tale chiave eventualmente deve essere usata anche quando ti colleghi al server (cluster ad esempio) da dove usi la copia di lavoro. nota bene 2: con SVN non serve che tu modifichi i file nel sistema in produzione: puoi editarli anche da una copia in locale sul tuo desktop/laptop. Quando le modifiche saranno terminate potrai estrarle anche (sempre come copia) nel sistma in produzione. nota bene 3: dove e' possibile (ovvero quasi sempre) fai un file di configurazione per il progetto ed evita di tenere le variabili di configurazione nello stesso file dei sorgenti. GNUEmacs ha comandi integrati per accedere alla copia del progetto via svn. M-x svn-status e ti trovi nel menu SVN i comandi per l'SVN, ma in particolare puoi navigare nel progetto verificando quali file eventualmente sono presenti ma non ancora aggiunti all'archivio.