Tool di sviluppo Source control system Ricci Gian Maria 1° Workshop DotNetMarche.Start () Giovedì 12 ottobre 2006 DotNetMarche.Start ()
Cosa fa un source control system Centralizza la memorizzazione di files Centralizza la memorizzazione di files Permette a più utenti di lavorare contemporaneamente sugli stessi files Permette a più utenti di lavorare contemporaneamente sugli stessi files Gestisce il versioning dei file Gestisce il versioning dei file Costituisce un backup condiviso del progetto Costituisce un backup condiviso del progetto Repository Working copy (client 1) Working copy (client 2) Working copy (client 3)
A chi è diretto un SCS Team di sviluppo Team di sviluppo Permette a più persone di lavorare sugli stessi files Permette a più persone di lavorare sugli stessi files Gestisce la concorrenza delle modifiche Gestisce la concorrenza delle modifiche Centralizza la posizione di tutti i file di un progetto Centralizza la posizione di tutti i file di un progetto Singoli sviluppatori Singoli sviluppatori Mantiene lo storico di tutte le versioni Mantiene lo storico di tutte le versioni Permette di creare snapshot di particolari momenti di vita di un progetto (Es: Beta, Release) Permette di creare snapshot di particolari momenti di vita di un progetto (Es: Beta, Release) Gestisce deviazioni dal processo principale (branching) Gestisce deviazioni dal processo principale (branching) È un implicito backup di un progetto. È un implicito backup di un progetto. Ogni sviluppatore dovrebbe utilizzare un Source control system per i propri progetti Ogni sviluppatore dovrebbe utilizzare un Source control system per i propri progetti
Gestire la concorrenza con Lock V3 V2 Mario Luigi Repository Update/Lock V3V4 Commit V4 Punti di forza Punti di forza Evita completamente ogni conflitto di versione Evita completamente ogni conflitto di versione Permette di conoscere chi sta lavorando ai vari file Permette di conoscere chi sta lavorando ai vari file Punti deboli Punti deboli Riduce la concorrenza possibile Riduce la concorrenza possibile Richiede più attenzione per non dimenticare lock attivi Richiede più attenzione per non dimenticare lock attivi
Gestire la concorrenza senza lock V3 V2 Mario Luigi Repository Update V3 V4aV4b Commit V4a V3V5 Resolve Conflict V5 Punti di forza Punti di forza Minimizza la serializzazione delle modifiche Minimizza la serializzazione delle modifiche Evita la presenza di lock dimenticati Evita la presenza di lock dimenticati Forza un aumento della comunicazione Forza un aumento della comunicazione Punti deboli Punti deboli In caso di conflitto è necessario un intervento manuale In caso di conflitto è necessario un intervento manuale Può creare problemi su tipi di file non fondibili Può creare problemi su tipi di file non fondibili
Pregi Pregi Elevata integrazione con il Visual Studio Elevata integrazione con il Visual Studio Difetti Difetti Scarse prestazioni in ambienti internet Scarse prestazioni in ambienti internet Possibilità di corruzione repository per operazioni interrotte Possibilità di corruzione repository per operazioni interrotte È un prodotto a pagamento È un prodotto a pagamento Difficoltà di uso in ambiente internet Difficoltà di uso in ambiente internet Bassa scalabilità per numero di utenti Bassa scalabilità per numero di utenti Richiede un accesso costante al repository Richiede un accesso costante al repository Pregi e difetti di Source Safe
Pregi Pregi Prodotto gratuito Prodotto gratuito Prodotto in continua evoluzione Prodotto in continua evoluzione Elevate prestazioni anche in ambienti internet Elevate prestazioni anche in ambienti internet Alta scalabilità Alta scalabilità Buona integrazione con la shell (tortoise) Buona integrazione con la shell (tortoise) Non richiede un accesso costante al repository Non richiede un accesso costante al repository Commit transazionali, il database non si corrompe per connessioni interrotte Commit transazionali, il database non si corrompe per connessioni interrotte Difetti Difetti Scarsa o nulla integrazione con il Visual Studio Scarsa o nulla integrazione con il Visual Studio Pregi e difetti di Subversion
Istallazione Istallazione Basta eseguire il setup e rispondere alle domande di rito Basta eseguire il setup e rispondere alle domande di rito Gestione (programmi istallati) Gestione (programmi istallati) Admin: Permette di creare repository nel file system e definire le credenziali di accesso ai vari repository creati 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… 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 Analizzatori: Controllano lo stato del db per verificare e/o correggere errori Source safe Solitamente è sufficiente lavorare allinterno del Visual Studio e lasciare che il plugin svolga il lavoro dietro le quinte in modo quasi trasparente.
Source safe – integrazione VS
Source safe – Console
È possibile lavorare disconnessi in Source Safe semplicemente togliendo lattributo 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 Lavorare disconnessi in source safe Pro Pro Non è necessario avere una connessione continua al database aumentando la scalabilità Non è necessario avere una connessione continua al database aumentando la scalabilità Contro 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 È possibile sovrascrivere le modifiche fatte da altri utenti durante il lavoro disconnesso a meno che non venga esplicitamente fatto il checkout prima di disconnettersi
Subversion Subversion Scaricare ed installare lultima versione Scaricare ed installare lultima versione Scegliere una cartella del proprio server dove tenere i repository Scegliere una cartella del proprio server dove tenere i repository Creare un repository con listruzione svnadmin create d:\svnrep\Test Creare un repository con listruzione svnadmin create d:\svnrep\Test Istallare il servizio con sc create svnserver binpath= c:\..\bin\svnserve.exe --service --root d:\svnrep" displayname= "subversion server Istallare il servizio con sc create svnserver binpath= c:\..\bin\svnserve.exe --service --root d:\svnrep" displayname= "subversion server Tortoise Tortoise Scaricare ed installare lultima versione Scaricare ed installare lultima versione Testare con un repository browser se è possibile accedere al repository svn://localhost/Test Testare con un repository browser se è possibile accedere al repository svn://localhost/Test Istallare Subversion
Configurare il repository File path\conf\svnserve.conf File path\conf\svnserve.conf Contiene la configurazione del repository Contiene la configurazione del repository Per una configurazione di default decommentare le seguenti linee Per una configurazione di default decommentare le seguenti linee anon-access = none anon-access = none auth-access = write auth-access = write password-db = passwd password-db = passwd File path\conf\passwd File path\conf\passwd Contiene le password del repository Contiene le password del repository Le password sono memorizzate in chiaro come coppia utente=password Le password sono memorizzate in chiaro come coppia utente=password
Repository Browser
CheckOut
Aggiunta di file al repository
Icone di subversion
Eseguire un commit
Modifiche concorrenti senza conflitto
Modifica concorrente con conflitto
Numeri di versione in subversion Ad ogni operazione di update il subversion incrementa il numero di versione 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 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 allultimo update per confronto con il repository Il repository locale tiene nella.svn la copia dei file relativi allultimo update per confronto con il repository Alcune revisioni sono così importanti che hanno un modo particolare per essere individuate 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 Head: Rappresenta la versione attualmente più recente di un file o cartella BASE: La versione presente attualmente nella cartella.svn della working copy BASE: La versione presente attualmente nella cartella.svn della working copy COMMITTED: Lultima revisione in cui un file è stato cambiato prima di BASE COMMITTED: Lultima revisione in cui un file è stato cambiato prima di BASE PREV: COMMITTED – 1, la precedente versione rispetto a COMMIT PREV: COMMITTED – 1, la precedente versione rispetto a COMMIT
Risolvere il conflitto
Controllare la storia di un file
Verificare lo stato dei file
Utilizzare lock in Subversion Effettuare un lock impedisce agli altri utenti di effettuare il commit 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) 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 È 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 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 È possibile impostare script di tipo hook nel server che avvertono in maniera esplicita, ad esempio via mail quando viene effettuato un lock
Tortoise svn:needs-lock
Comandi base Check for modification: controlla quali file sono stati modificati Check for modification: controlla quali file sono stati modificati Revert: Annulla le ultime modifiche fatte Revert: Annulla le ultime modifiche fatte Get/Release Lock: Permette di lavorare in lock mode Get/Release Lock: Permette di lavorare in lock mode Add: Aggiunge file al repository Add: Aggiunge file al repository Blame: Mostra per ogni file la lista dei cambiamenti con relativo autore 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. 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 Rename, Delete: Permettono di cancellare/rinominare i file dalla propria copia corrente, marcandoli come cancellati/rinominati Revision Graph: mostra un grafico delle revisioni effettuate Revision Graph: mostra un grafico delle revisioni effettuate
Branch Permette di gestire più versioni contemporaneamente dei file 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 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) Utile per marcare una milestone dei propri progetti (in realtà è sufficente il numero di versione)
Comandi base
Aggiungere un progetto VS al repository Creare la cartella nel repository dalla finestra Browse Repository Creare la cartella nel repository dalla finestra Browse Repository Effettuare il checkout della nuova cartella nella stessa cartella locale del progetto 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 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 Con il comando Add to ignore list indicare al tortoise che deve escludere le cartelle bin e obj
Aggiungere un progetto VS al repository
Buone pratiche da seguire Includere se possibile un commento ad ogni checkout, in particolare se laggiornamento è connesso a qualche modifica sostanziale tipo limplementazione di una nuova feature oppure la correzione di un bug Includere se possibile un commento ad ogni checkout, in particolare se laggiornamento è connesso a qualche modifica sostanziale tipo limplementazione di una nuova feature oppure la correzione di un bug Effettuare un commit immediato dopo laggiunta di un file al progetto per evitare conflitti nel file di progetto Effettuare un commit immediato dopo laggiunta 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. 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 Cartella Tools Includere linstaller di ogni tool necessario per lavorare al progetto Includere linstaller di ogni tool necessario per lavorare al progetto Includere se necessario una breve spiegazione allistallazione ed al primo utilizzo Includere se necessario una breve spiegazione allistallazione ed al primo utilizzo Cartella Libraries Cartella Libraries Includere tutte le librerie di terze parti utilizzate nel progetto (nunit, nmock, enterprise-library, Atlas) Includere tutte le librerie di terze parti utilizzate nel progetto (nunit, nmock, enterprise-library, Atlas) Cartella Docs Cartella Docs Includere tutti i file di documentazione, da diagrammi uml a semplici file testo che contengono informazioni sul progetto Includere tutti i file di documentazione, da diagrammi uml a semplici file testo che contengono informazioni sul progetto Cartella References Cartella References Librerie sviluppate internamente che non hanno un installer Librerie sviluppate internamente che non hanno un installer Versione decompressa delle librerie utilizzate (nunit, …) Versione decompressa delle librerie utilizzate (nunit, …) In generale tutti gli assembly che vengono referenziati dai propri progetti In generale tutti gli assembly che vengono referenziati dai propri progetti Cartella projects Cartella projects I file di progetto, le solution, in generale tutto il codice sorgente. I file di progetto, le solution, in generale tutto il codice sorgente.
Comandi base
Domande?
Slide e Materiale Grazie!