Server Galileo http://galileo.dmi.unict.it/
Gestione progetti Wiki Subversion
Iscrizione a Galileo Per registrarsi è sufficiente iscriversi da questa pagina: https://galileo.dmi.unict.it/iscrizioni/ L'account è attivo dopo 24 ore
Registrare un progetto Fare il login su MyGalileo ed inserire il nome del progetto. Il progetto viene effettivamente creato dopo 24 ore Fare attenzione quando si inserisce il nome (non si può modificare)
Leader del progetto La persona che registra il progetto ne diventa il leader e può: Aggiungere e rimuovere membri Impostare la descrizione Stabilire i permessi per i membri Cedere il la leadership ad un altro utente
Cose da sapere... Tutti i progetti devono avere licenza open source, dato che i repository sono accessibili in lettura da tutti Possono partecipare ai progetti solo utenti iscritti al server Galileo
Che cosa è subversion? Dice wikipedia: in informatica, il controllo versione è la gestione di versioni multiple di un insieme di informazioni.
Vantaggi Si ottiene immediatamente l'ultima versione del software e si lavora su quella Si tiene traccia di tutte le modifiche, e in caso di regressioni è facile recuperare la versione precedente Impedisce modifiche contemporanee della stessa porzione di codice
Vantaggi Si può lavorare da qualsiasi computer connesso ad internet Riduce la necessità di backup Ciascuno è responsabile per le modifiche che ha apportato Supportato da quasi tutti gli IDE e facile da usare da terminale
Svantaggi Connessione ad internet necessaria, anche se non in modo continuativo Bisogna comprendere il funzionamento di base per un utilizzo corretto
SVN: Buone norme Fare il commit solo di programmi funzionanti Scrivere sempre l'oggetto della modifica Effettuare sempre l'update prima di iniziare a lavorare Fare il commit di singole modifiche, non di gruppi di modifiche
Parametri SVN Ecco i parametri per utilizzare svn: URL: http://galileo.dmi.unict.it/svn/nomeprogetto/ Username: inserito in fase di registrazione e case sensitive Password: inserita in fase di registrazione e case sensitive
Client SVN Multipiattaforma Eclipse: http://subclipse.tigris.org/ NetBeans GNU/Linux Kdesvn Svn (da linea di comando) Mac OsX Svn (da linea di comando) Windows TortoiseSVN: http://tortoisesvn.tigris.org/
Istruzioni non dettagliate Le istruzioni di queste slide sono molto poco dettagliate. SVN è molto potente e queste slide intendono fornire semplicemente le basi per l'utilizzo. Una guida completa può essere trovata su: http://svnbook.red-bean.com/ Le istruzioni per gli IDE sono molto vaghe perché gli IDE differiscono tra loro nell'interfaccia e risulta difficile scrivere una guida unificata.
Iniziare con svn: CHECKOUT Il comando checkout crea una working copy locale del progetto. Oltre a scaricare l'ultima versione disponibile, genera dei file locali che mantengono informazioni sulla versione. È la prima operazione che bisogna effettuare. Anche iniziando un nuovo progetto. Infatti nonostante non ci siano file, verranno generati i file con le informazioni sulla versione. Usando un IDE, di solito si inserirà l'url ed i dati per il login in fase di creazione del progetto. Il comando da terminale è: svn checkout http://galileo.dmi.unict.it/svn/project
Iniziare con svn: UPDATE Il comando update aggiorna la working copy locale scaricando le ultime versioni dei file disponibili sul repository online. È sempre consigliabile effettuare un update prima di iniziare a lavorare, in modo di evitare di lavorare su una vecchia versione e risolvere problemi che sono già stati risolti. Negli IDE, solitamente un menu consente di effettuare questa operazione. Il comando da terminale è: cd dir_locale_del_progetto svn update
Iniziare con svn: COMMIT Il comando commit consente di pubblicare sul server le modifiche effettuate in locale in modo che siano disponibili agli altri programmatori. È buona norma effettuare commit dopo aver provato che il codice modificato funzioni. È anche buona norma scrivere l'oggetto della modifica, in modo che sia possibile comprendere rapidamente la modifica con il comando log. È bene effettuare un commit per ogni modifica logica al codice. Gli IDE hanno una voce di menu per il commit, nello stesso menu di quella per l'update. Il comando da terminale è: cd directory_del_progetto svn commit -m 'ho modificato blabla'
Esempio da terminale Questo esempio mostra come iniziare a lavorare partendo da un repository vuoto #Creo le strutture di base svn checkout http://galileo.dmi.unict.it/svn/progetto #Entro nella directory del progetto appena creata cd progetto #creo un file echo 'Questa è una prova'>readme #dico ad svn di mettere il file sotto controllo di versione svn add primofile.c #Faccio il commit svn commit -m 'prima versione!!!'
Esempio da terminale Questo esempio mostra come iniziare a lavorare partendo da un repository non vuoto #Creo le strutture di base e scarico i file svn checkout http://galileo.dmi.unict.it/svn/progetto #Entro nella directory del progetto appena scaricata cd progetto #modifico un file esistente nano file.c #Faccio il commit svn commit -m 'prima versione!!!'
Esempio da terminale Questo esempio mostra come continuare a lavorare. partendo da un repository non vuoto #Entro nella directory del progetto cd progetto #Scarico l'ultima versione svn update #modifico un file esistente nano file.c #Faccio il commit svn commit -m 'prima versione!!!'
Risoluzione delle collisioni Utilizzando svn può capitare di imbattersi in collisioni. Quando si tenta di effettuare un commit su una parte di codice che è stata modificata da qualcun altro e caricata sul server, verrà mostrato un messaggio di errore. Si dovrà allora fare un update per ottenere l'ultima versione, ed apportare manualmente le proprie modifiche su quella versione. L'update metterà la copia locale in stato di conflitto, e nei file verranno evidenziate le aree in conflitto tramite l'inserimento di marcatori che mostrano e separano la versione locale e remota della parte del file in conflitto.
Risoluzione delle collisioni echo 'ciao'; <<<<<<<.mine $a='tizio'; ======= $a=getval('nome'); >>>>>>>.r6 echo '$a'; Non è possibile fare il commit di file in stato di conflitto. A fianco vediamo un esempio di file sorgente con un conflitto. La parte che precede gli ==== è la parte presente nella versione locale, e quella sotto è presente nella versione remota (di cui è mostrato il numero di revisione subito dopo gli >>>). Il programmatore dovrà risolvere manualmente il conflitto, marcarlo come risolto con: svn resolved fileinconflitto E pubblicarlo con: svn commit -m 'resolved...'
Annullare le modifiche locali Se ci si rende conto che le modifiche che abbiamo fatto sono problematiche e si vuole semplicemente tornare allo stato precedente, è possibile riportare la copia locale allo stato successivo all'ultimo update tramite il comando revert. Il comando da terminale è svn revert filemodificato1 filemodificato2
Storia Il comando log permette di vedere tutti i commit effettuati sul progetto, e per ogni commit di mostrare la descrizione del commit ed i file che sono stati modificati. Il comando da terminale è: svn log -v
Storia: vedere vecchi file Se dopo il log ci si accorge che un file è stato modificato in una data revisione e si vuole vedere il file in quella revisione, è possibile utilizzare il comando: svn cat -r #revisione http://urldelfile
Storia: confrontare vecchi file Se si vuole confrontare una vecchia revisione con una revisione attuale o semplicemente più nuova, ci viene in aiuto il comando diff. svn diff -r#rev1,#rev2 http://url_file_vecchio http://url_file_nuovo
Lavorare da terminale Sono disponibili i seguenti comandi, abbastanza autoesplicativi: add delete copy move mkdir
Controllare lo stato Per controllare lo stato di una copia locale (e cioè vedere quali file remoti saranno modificati, spostati, aggiunti, eliminati, e per vedere anche quali sono i file in conflitto) è disponibile il comando status. Il comando da terminale è: svn status
Argomenti avanzati Per argomenti avanzati quali il rollback ed il merge di due rami, si rimanda al manuale ufficiale.
Risorse Un tutorial più completo http://www.owlnet.rice.edu/~comp314/svn.html Galileo http://galileo.dmi.unict.it/index.php?section=guida Svn $ svn help http://svnbook.red-bean.com/index.it.html