380 likes | 500 Views
DotNetMarche.Start (). Tool di sviluppo Source control system. Ricci Gian Maria ricci.gm@nablasoft.com. 1° Workshop “DotNetMarche.Start ()” Giovedì 12 ottobre 2006. Cosa fa un source control system. Centralizza la memorizzazione di files
E N D
DotNetMarche.Start () Tool di sviluppoSource control system Ricci Gian Maria ricci.gm@nablasoft.com 1° Workshop “DotNetMarche.Start ()” Giovedì 12 ottobre 2006
Cosa fa un source control system • Centralizza la memorizzazione di files • Permette a più utenti di lavorare contemporaneamente sugli stessi files • Gestisce il versioning dei file • Costituisce un backup condiviso del progetto Working copy (client 1) Working copy (client 2) Repository Working copy (client 3)
A chi è diretto un SCS • Team di sviluppo • Permette a più persone di lavorare sugli stessi files • Gestisce la concorrenza delle modifiche • Centralizza la posizione di tutti i file di un progetto • Singoli sviluppatori • Mantiene lo storico di tutte le versioni • Permette di creare snapshot di particolari momenti di vita di un progetto (Es: Beta, Release) • Gestisce deviazioni dal processo principale (branching) • È un implicito backup di un progetto. • Ogni sviluppatore dovrebbe utilizzare un Source control system per i propri progetti
V3 V3 V2 V3 V4 V4 Gestire la concorrenza con Lock Luigi Update/Lock Commit Repository Mario • Punti di forza • Evita completamente ogni conflitto di versione • Permette di conoscere chi sta lavorando ai vari file • Punti deboli • Riduce la concorrenza possibile • Richiede più attenzione per non dimenticare lock attivi
V4a V4a V4b V3 V3 V4a V5 V5 V5 V2 V3 V3 V3 Gestire la concorrenza senza lock Luigi Resolve Conflict Commit Update Repository Mario • Punti di forza • Minimizza la serializzazione delle modifiche • Evita la presenza di lock dimenticati • Forza un aumento della comunicazione • Punti deboli • In caso di conflitto è necessario un intervento manuale • Può creare problemi su tipi di file non “fondibili”
Pregi e difetti di Source Safe • Pregi • Elevata integrazione con il Visual Studio • Difetti • Scarse prestazioni in ambienti internet • Possibilità di corruzione repository per operazioni interrotte • È un prodotto a pagamento • Difficoltà di uso in ambiente internet • Bassa scalabilità per numero di utenti • Richiede un accesso costante al repository
Pregi e difetti di Subversion • Pregi • Prodotto gratuito • Prodotto in continua evoluzione • Elevate prestazioni anche in ambienti internet • Alta scalabilità • Buona integrazione con la shell (tortoise) • Non richiede un accesso costante al repository • Commit transazionali, il database non si corrompe per connessioni interrotte • Difetti • Scarsa o nulla integrazione con il Visual Studio
Source safe • Istallazione • Basta eseguire il setup e rispondere alle domande di rito • Gestione (programmi istallati) • Admin: Permette di creare repository nel file system e definire le credenziali di accesso ai vari repository creati • SourceSafe (browser): Permette di vedere il contenuto di un repository e di eseguire le varie operazioni di checkout/checkin, etc… • Analizzatori: Controllano lo stato del db per verificare e/o correggere errori • Solitamente è sufficiente lavorare all’interno del Visual Studio e lasciare che il plugin svolga il lavoro dietro le quinte in modo quasi trasparente.
Lavorare disconnessi in source safe È possibile lavorare disconnessi in Source Safe semplicemente togliendo l’attributo readonly ai file che si vogliono modificare. Al successivo GetLatest il Source Safe chiede per ogni file se si vuole scartare le modifiche oppure se si vuole fare un chekout del file nel repository per poi aggiornarlo con le proprie modifiche • Pro • Non è necessario avere una connessione continua al database aumentando la scalabilità • Contro • È possibile sovrascrivere le modifiche fatte da altri utenti durante il lavoro disconnesso a meno che non venga esplicitamente fatto il checkout prima di disconnettersi
Istallare Subversion • Subversion • Scaricare ed installare l’ultima versione • Scegliere una cartella del proprio server dove tenere i repository • Creare un repository con l’istruzione svnadmin create d:\svnrep\Test • Istallare il servizio con sc create svnserver binpath= “c:\..\bin\svnserve.exe --service --root d:\svnrep" displayname= "subversion server“ • Tortoise • Scaricare ed installare l’ultima versione • Testare con un repository browser se è possibile accedere al repository svn://localhost/Test
Configurare il repository • File path\conf\svnserve.conf • Contiene la configurazione del repository • Per una configurazione di default decommentare le seguenti linee • anon-access = none • auth-access = write • password-db = passwd • File path\conf\passwd • Contiene le password del repository • Le password sono memorizzate in chiaro come coppia utente=password
Numeri di versione in subversion • Ad ogni operazione di update il subversion incrementa il numero di versione • Per commit di file multipli ad ogni file viene assegnato il nuovo numero di versione • Il repository locale tiene nella .svn la copia dei file relativi all’ultimo update per confronto con il repository • Alcune revisioni sono così importanti che hanno un modo particolare per essere individuate • Head: Rappresenta la versione attualmente più recente di un file o cartella • BASE: La versione presente attualmente nella cartella .svn della working copy • COMMITTED: L’ultima revisione in cui un file è stato cambiato prima di BASE • PREV: COMMITTED – 1, la precedente versione rispetto a COMMIT
Utilizzare lock in Subversion • Effettuare un lock impedisce agli altri utenti di effettuare il commit • I lock possono essere rotti (rimuovere un lock di un altro utente) o rubati (acquisire un lock anche se acquisito da un altro utente) • È buona norma inserire un commento ai lock e ricorrere al lock solo se strettamente necessario • È possibile utilizzare la proprietà svn:needs-lock per rendere read-only tutti i file che non hanno attualmente un lock impostato • È possibile impostare script di tipo hook nel server che avvertono in maniera esplicita, ad esempio via mail quando viene effettuato un lock
Comandi base • Check for modification: controlla quali file sono stati modificati • Revert: Annulla le ultime modifiche fatte • Get/Release Lock: Permette di lavorare in lock mode • Add: Aggiunge file al repository • Blame: Mostra per ogni file la lista dei cambiamenti con relativo autore • Create Patch: Crea un file in unified diff format delle modifiche attualmente fatte su un file. • Rename, Delete: Permettono di cancellare/rinominare i file dalla propria copia corrente, marcandoli come cancellati/rinominati • Revision Graph: mostra un grafico delle revisioni effettuate
Branch • Permette di gestire più versioni contemporaneamente dei file • Utile quando si ha la necessità di mantenere due versioni di uno stesso progetto che differiscono in pochi file • Utile per marcare una milestone dei propri progetti (in realtà è sufficente il numero di versione)
Aggiungere un progetto VS al repository • Creare la cartella nel repository dalla finestra Browse Repository • Effettuare il checkout della nuova cartella nella stessa cartella locale del progetto • Effettuare il commit selezionando dalla finestra di commit tutti i file tranne quelli delle cartelle bin e obj • Con il comando Add to ignore list indicare al tortoise che deve escludere le cartelle bin e obj
Buone pratiche da seguire • Includere se possibile un commento ad ogni checkout, in particolare se l’aggiornamento è connesso a qualche modifica sostanziale tipo l’implementazione di una nuova feature oppure la correzione di un bug • Effettuare un commit immediato dopo l’aggiunta di un file al progetto per evitare conflitti nel file di progetto • Effettuare lock durante la modifica di file che non possono essere sottoposti a merge, in generale file binari non testo.
Cosa includere nel repository • Cartella Tools • Includere l’installer di ogni tool necessario per lavorare al progetto • Includere se necessario una breve spiegazione all’istallazione ed al primo utilizzo • Cartella Libraries • Includere tutte le librerie di terze parti utilizzate nel progetto (nunit, nmock, enterprise-library, Atlas) • Cartella Docs • Includere tutti i file di documentazione, da diagrammi uml a semplici file testo che contengono informazioni sul progetto • Cartella References • Librerie sviluppate internamente che non hanno un installer • Versione decompressa delle librerie utilizzate (nunit, …) • In generale tutti gli assembly che vengono referenziati dai propri progetti • Cartella projects • I file di progetto, le solution, in generale tutto il codice sorgente.
Slide e Materiale www.dotnetmarche.org Grazie!