Sistemi per il controllo versione del software (VCS)



Documenti analoghi
Gestione della configurazione del software

Prova Finale Controllo delle versioni

Server Galileo.

Luca Ottaviano. Everyday Git

Tecnologie Open Source. Subversion

Iniziamo la panoramica sul funzionamento dell'svn sulla suite S.A.

Corso Git Riccardo Binetti 22 Ottobre Riccardo Binetti Corso Git Ottobre / 38

Eclipse e Subversion

Fabio Zanasi. 12 maggio 2010

Programmazione Java Avanzata

Alma Mater Studiorum Università di Bologna. Controllo di versione. S. Golovchenko (UNIBO) INGEGNERIA DEI SISTEMI SOFTWARE / 18

III.2 Come condividere risultati

Pillole di Bazaar. user manual

Introduzione al Configura1on & Source Management. Ingegneria del So-ware e Lab. Università di Modena e Reggio Emilia Do<.

MANUALE PARCELLA FACILE PLUS INDICE

Il Web Server e il protocollo HTTP

Strumenti di gestione del ciclo di vita del software

Software di gestione della stampante

Overview su Online Certificate Status Protocol (OCSP)

Nuovo Order Manager per il software NobelProcera

IBM SPSS Statistics per Linux - Istruzioni di installazione (Licenza per sito)

TERMINALE. Creazione e gestione di una postazione terminale di Eureka

Ambienti per lo sviluppo collaborativo del software (CDE)

File Server Resource Manager (FSRM)

I Codici Documento consentono di classificare le informazioni e di organizzare in modo logico l archiviazione dei file.

Dexma Newsletter System

Breve guida all'utilizzo di TortoiseSVN

PORTALE CLIENTI Manuale utente

Product Shipping Cost Guida d'installazione ed Utilizzo

Introduzione a Dev-C++

AMBIENTE DEV PASCAL. Dev-Pascal Finestra di apertura

Gestione della Configurazione

HBase Data Model. in più : le colonne sono raccolte in gruppi di colonne detti Column Family; Cosa cambia dunque?

ARCHIVIAZIONE DOCUMENTALE NEiTdoc

e-design Manuale d uso

Gestione Risorse Umane Web

FPf per Windows 3.1. Guida all uso

Integrazione InfiniteCRM - MailUp

Software testing. Lezione 8 Configuration Management Federica Spiga federica_spiga@yahoo.it. A.A Autori: F.Spiga

Come usare P-touch Transfer Manager

Scheda di Notifica Manuale d'uso

ROM Upgrade Utility (RUU) Prima dell aggiornamento fare attenzione se

FAQ RISPOSTE A DOMANDE FREQUENTI

Licenza per sito Manuale dell amministratore

NOTE OPERATIVE. Prodotto Inaz Download Manager. Release 1.3.0

Coordinazione Distribuita

Guida ai primi passi con Atlassian JIRA.

Omeka PURL Plugin. Torino, 30 settembre Emilio Remogna

MODEM USB MDC525UP Guida Rapida LINUX

IBM SPSS Statistics per Mac OS - Istruzioni di installazione (Licenza per sito)

Guida Software GestioneSpiaggia.it

AeMmag Software. (Gestione vendite e magazzino) Guida per l utente. Versione Manuale di utilizzo Stato: Definitivo

HORIZON SQL CONFIGURAZIONE DI RETE

MANUALE UTENTE Fiscali Free

Strumenti per la gestione della configurazione del software

IBM SPSS Statistics per Mac OS - Istruzioni di installazione (Licenza per utenti singoli)

RADAR. Raccolta e Analisi Dati per Attribuzione Rating

LA SOLUZIONE. EVOLUTION, con la E LA TECNOLOGIA TRASPARENTE IL SOFTWARE INVISIBILE INVISIBILE ANCHE NEL PREZZO R.O.I. IMMEDIATO OFFERTA IN PROVA

CORSO ACCESS PARTE II. Esistono diversi tipi di aiuto forniti con Access, generalmente accessibili tramite la barra dei menu (?)

Fattura Facile. In questo menù sono raggruppati, per tipologia, tutti i comandi che permettono di gestire la manutenzione degli archivi.

Tutorial KISSsoft: versione di prova e fasi iniziali

Accreditamento Soggetti Formatori in materia di Sicurezza sul Lavoro

IBM SPSS Statistics per Windows - Istruzioni di installazione (Licenza per utenti singoli)

Sistemi operativi. Esempi di sistemi operativi

Manuale Amministratore Legalmail Enterprise. Manuale ad uso degli Amministratori del Servizio Legalmail Enterprise

filrbox Guida all uso dell interfaccia WEB Pag. 1 di 44

LA GESTIONE DELLE VISITE CLIENTI VIA WEB

GUIDA ALLE SOLUZIONI

Gestione delle informazioni necessarie all attività di validazione degli studi di settore. Trasmissione degli esempi da valutare.

IRSplit. Istruzioni d uso 07/10-01 PC

MODELLO CLIENT/SERVER. Gianluca Daino Dipartimento di Ingegneria dell Informazione Università degli Studi di Siena

Mon Ami 3000 Conto Lavoro Gestione del C/Lavoro attivo e passivo

11/02/2015 MANUALE DI INSTALLAZIONE DELL APPLICAZIONE DESKTOP TELEMATICO VERSIONE 1.0

Intel One Boot Flash Update Utility Guida dell utente

Scuola Superiore Sant Anna. Progetto parte Unix. AA : Distributed File Repository

4.1 FAX Sollecito consegne via (Nuova funzione)

Manuale d uso [Rev.1 del 07/08/2015] Manutenzione impianti termici Ver [05/01/2015]

Manuale Utente per la Domanda di Iscrizione nell Elenco Revisori degli Enti Locali

Strumenti per lo sviluppo software in comunità

FOXWave Gestione gare ARDF IZ1FAL Secco Marco Sezione ARI BIELLA

SOMMARIO... 3 INTRODUZIONE...

Con SIGLA Green Pack vengono esaltate le caratteristiche di gestionale paperless

Guida alla registrazione on-line di un NovaSun Log

InfiXor. il programma facile e versatile per preventivi veloci e completi. il software di preventivazione per produttori e rivenditori di infissi

Istruzioni di installazione di IBM SPSS Modeler Text Analytics (licenza per sito)

Manuale di Aggiornamento BOLLETTINO. Rel D1. DATALOG Soluzioni Integrate a 32 Bit

Il SOFTWARE DI BASE (o SOFTWARE DI SISTEMA)

Sistema Banca dati e Repertorio dei dispositivi medici Notifiche multiple di DM simili

SPSS Statistics per Windows - Istruzioni di installazione per (Licenza per utenti singoli)

Corso Eclipse. Prerequisiti. 1 Introduzione

Qui Pago (Key Client/CartaSì) Guida d'installazione ed Utilizzo

Manuale LiveBox WEB ADMIN.

Manuale Utente. Gestione Richieste supporto Data Warehouse. Della Ragioneria Generale dello Stato. Versione 1.0. Roma, Ottobre 2015

Manuale Utente. Gestione Richieste supporto BDAP. Versione 1.0

SU Suap. IS357_03_01 Lettera aggiornamento SUAP vers Pagina 1 di 10

Integrazione del progetto CART regione Toscana nel software di CCE K2

Software Servizi Web UOGA

INSTALLARE L AMBIENTE DI SVILUPPO PER JOOMLA 2.5

Manuale di Blogilo. Mehrdad Momeny Traduzione e revisione del documento: Valter Mura

lem logic enterprise manager

Transcript:

Sistemi per il controllo versione del software (VCS) dott. Fabio Calefato 1 Indice Concetti alla base del controllo versione Versione e Configurazione Memorizzazione delle versioni Baseline e Release Alcune pratiche consigliate dott. Fabio Calefato 2 1

Esigenze di un team di sviluppo Presenza di un repository (centralizzato) e condiviso tra i membri del team di sviluppo Gestione delle modifiche effettuate contemporaneamente a uno stesso file da parte di due membri differenti Gestione delle diverse versioni di un prodotto che può evolvere Ripristino di vecchie versioni di prodotti Individuazione di versioni del prodotto in cui sono stati risolti errori o introdotte nuove funzionalità Gestione delle versioni e delle configurazioni di prodotti e di semilavorati dott. Fabio Calefato 3 diff e patch Utilizzo combinato dei tool Unix diff e patch diff permette il confronto di due file simili (F1 e F2) restituisce in output una lista (d) con le differenze riscontrate diff: F2 F1 = d patch modifica il file originale (F1) inserendo le modifiche crea una versione (F2) cosiddetta patched patch: F2 = F1 + d Nessuna capacità di tenere traccia della storia di un progetto dott. Fabio Calefato 4 2

dott. Fabio Calefato 5 dott. Fabio Calefato 6 3

Versione e Configurazione Versione: stato di un elemento in un istante di tempo Configurazione: insieme di moduli software, documentazione, ecc., utilizzati per costruire un prodotto Due configurazioni differiscono se contengono due versioni diverse dello stesso modulo (contenuto diverso) dott. Fabio Calefato 7 Memorizzazione delle versioni (1/3) Completa: memorizzare ogni versione di un modulo in un file separato Pro: facilità ed efficienza nel reperimento di una specifica versione Con: troppo spazio di memorizzazione richiesto Delta: memorizzare in forma completa solo una versione e di tutte le altre versioni si conservano solo le differenze forward delta: prima versione e differenze rispetto alle successive backward delta: versione più recente e differenze rispetto alle precedenti Pro: ottimizzazione dello spazio di memorizzazione richiesto Con: meno efficiente nel reperimento di una specifica versione dott. Fabio Calefato 8 4

Memorizzazione delle versioni (2/3) Ogni versione è identificata da un numero completa 1.1 1.2 1.3 1.4 2.1 forward delta 1.1 1.2 1.3 1.4 2.1 backward delta 1.1 1.2 1.3 1.4 2.1 dott. Fabio Calefato 9 Baseline e Release Baseline: insieme di elementi versionati fotografati in un determinato istante di tempo è stata sottoposta a una revisione formale ed ha ricevuto l approvazione da parte del manager responsabile è utilizzata come base per lo sviluppo successivo Release: promozione di una baseline acquisisce visibilità all esterno del gruppo/organizzazione responsabile dott. Fabio Calefato 10 5

Modello copy-modify-merge Supera limiti del modello lockmodify-unlock copy: ogni sviluppatore crea sulla propria macchina (client) una working copy (o copia di lavoro) richiedendola al repository (server) modify: gli sviluppatori possono lavorare in parallelo modificando la propria copia di lavoro merge: le copie di lavoro vengono fuse quando vengono rispedite al repository dott. Fabio Calefato 11 Comandi (1/4) [Checkout] Ottenere un nuovo modulo Il client ricrea la struttura di directory del repository sulla macchina locale [Commit] Inviare le modifiche al server Prima di qualsiasi commit eseguire sempre un update per ottenere le eventuali altre modifiche [Update] Ottenere le nuove modifiche Le modifiche vengono unite ai file locali in automatico a meno che non ci siano conflitti I conflitti sono risolti manualmente mediante l ausilio del tool diff dott. Fabio Calefato 12 6

Sviluppatore A Funzionamento del modello copy-modify-merge Sviluppatore B v 1.1 v 1.2 1. checkout 2. checkout Repository v 1.1 v 1.2 3. commit v 1.1 v 1.2 4. commit 5. update Sviluppatore C v 1.3 6. commit v 1.3 v 1.4 7. checkout 8. commit v 1.4 dott. Fabio Calefato 13 Comandi (2/4) [Add] Aggiungere file e/o directory I file vengono marcati per l aggiunta Per rendere definitive le modifiche è necessario eseguire un commit [Remove] Rimuovere file e/o directory Per rendere definitive le modifiche è necessario eseguire un commit dott. Fabio Calefato 14 7

Comandi (3/4) [Tag] Mettere un etichetta ai file Prima di rilasciare una release è necessario tenere traccia dello stato dei file Marcare lo stato dei file dell attuale configurazione con un nome simbolico Usare un nome che contenga una indicazione del tipo di uso che si farà della release e un codice numerico Esempio: se è una release da usare in produzione ed è la prima che produciamo, si può usare Prod1_0 [Release] Creare una release Dopo aver etichettato i file, si può creare il pacchetto relativo al modulo da rilasciare dott. Fabio Calefato 15 Comandi (4/4) [Branch] Ottenere diverse linee di sviluppo Etichettare nuovamente la release aprendo in contemporanea una linea di sviluppo alternativa in gergo viene chiamata branch Eseguire il checkout del branch appena aperto Lavorare sulla copia locale della versione [Merge] Effettuare il merge da un branch Se le modifiche in un branch raggiungono una fase stabile, è possibile riportarle nella linea principale di sviluppo Per rendere definitive le modifiche è necessario eseguire un commit dott. Fabio Calefato 16 8

CVS Concurrent Versions System http://www.cvshome.org/ Utilizzo del modello copy-modify-merge Sviluppato da Dick Grune nel 1986 Rilasciato sotto GNU General Public License sul newsgroup mod.sources il 23 giugno 1986 È una collezione di script Riscritti in linguaggio C da Brian Berliner nel 1989 Risolve i problemi lasciati aperti da RCS Gestione di un progetto come un unica entità Networking (Jim Kingdon, 1990) mediante un architettura client-server dott. Fabio Calefato 17 SVN Subversion http://subversion.tigris.org/ Utilizzo del modello copy-modify-merge Nasce come progetto open source su Tigris.org La versione 1.0 è stata rilasciata il 23 Febbraio 2004 sotto licenza Apache/BSD-style Comprende gran parte delle caratteristiche di CVS e le estende dott. Fabio Calefato 18 9

Novità rispetto a CVS Il controllo di versione avviene anche sulle directory Un file che era stato precedentemente rimosso può essere aggiunto nuovamente I file binari sono gestiti efficientemente Il protocollo client/server invia solo le differenze in entrambe le direzioni I commit sono atomici Diverse modalità di accesso al repository dott. Fabio Calefato 19 Client Subversion TortoiseSVN Estensione GUI per windows http://tortoisesvn.tigris.org/ Subclipse Plugin per Eclipse http://subclipse.tigris.org/ Subversive Plugin per Eclipse http://www.eclipse.org/subversive/ dott. Fabio Calefato 20 10

dott. Fabio Calefato 21 Alcune pratiche consigliate Eseguire [Update] di frequente e integrare spesso le modifiche sul server Eseguire il [Commit] solo di codice perfettamente compilabile Testare a fondo prima del commit I [Merge] per eventuali conflitti emersi durante un [Commit] devono essere tempestivi dott. Fabio Calefato 22 11

Centralized vs. Distributed VCS Sia CVS che SVN sono sistemi centralizzati Modello client-server Server mantiene storia completa del progetto (codice, metadati) Client mantiene porzione limitata del progetto Sistemi decentralizzati (metà ~2000) Modello P2P Nessun server, ogni repository clone completo Commit resta locale, bisogna renderlo pubblico dott. Fabio Calefato 23 Git Inizialmente sviluppato da Linus Torvalds per il progetto Linux 2002: da CVS a BitKeeper (BitMover - proprietario) DVCS timeline GNU arch (2001), Monotone (2003) [1st gen.] Darcs (2002), Git (2005), Mercurial (2005), Bazaar (2005) [2nd gen.] dott. Fabio Calefato 24 12

DEMO GIT dott. Fabio Calefato 25 Installazione git (riga di comando) http://git-scm.com/downloads Windows, Linux, Mac dott. Fabio Calefato 26 13

Configurare git (1/2) $ git config --global user.name "Your Name" $ git config --global user.email you@email.com dott. Fabio Calefato 27 Configurare git (2/2) Stabilisce il comportamento di default in caso di push senza fornire un refspec $git config global push.default nothing (do not push anything unless a refspec is explicitly given) matching (push all branches having the same name on both ends) upstream (push the current branch back to the one it was cloned from) current (push the current branch to a branch of the same name, even if not its upstream) simple* (like upstream in centralized workflows or current in decentralized ones, refuses to push if the upstream branch s name is different from the local one) * default a partire da Git 2.0 dott. Fabio Calefato 28 14

Creare un progetto in git Modalità 1: versionare artefatti esistenti in git $ cd YOUR_PROJECT_FOLDER $ git init Initialized empty Git repository in.git/ $ git add -A $ git commit a m "primo commit" Aggiunge e committa tutti i cambiamenti Inizia a tracciare i cambiamenti di tutti i file e cartelle nella directory corrente (snapshot) Conserva la versione nel repository locale dott. Fabio Calefato 29 Creare un progetto in git Modalità 2: clonare un repository git esistente $ git clone URL [YOUR_PROJECT_FOLDER] Il repository locale è il clone, quello originale all indirizzo URL è l origin Esempio $ git clone https://github.com/collab-uniba/wpcalendapp-plugin.git Fork è l azione di creare un clone di un repository origin dott. Fabio Calefato 30 15

Recuperare modifiche da origin Per aggiornare la copia clone locale con le ultime modifiche $ git pull Scarica le modifiche dal repository remoto origin e le integra in quello clone locale Nota $git status Fornisce info sulle modifiche non committate nel repository locale $ git fetch Fornisce info sulle modifiche pendenti nel repository remoto non integrate nel clone locale dott. Fabio Calefato 31 Verificare la storia delle modifiche $ git log oneline revisionid commento dott. Fabio Calefato 32 16

Ritornare a una vecchia versione $ git checkout revisionid Esempio: tornare al primo commit $ git checkout 8a04d37 dott. Fabio Calefato 33 Ritornare all ultima versione del progetto $ git checkout master dott. Fabio Calefato 34 17

Tag di una versione Annotare una versione del repository con un nome simbolico Es. 1.0.0 più facile da ricordare del commit ID 36c3a0c $ git tag 0.0.1 [ m "Release iniziale 0.0.1"] $ git push origin tag 0.0.1 $ git tag $ git checkout [branch name tag name revisionid] $ git tag d 0.0.1 $ git push origin :refs/tags/0.0.1 Applica tag 0.0.1 in locale Salva tag 0.0.1 sull origin remoto Elenca tag esistenti Cancella tag locale Cancella tag da repo remoto origin dott. Fabio Calefato 35 Branch Un branch (ramo) è una linea di sviluppo La linea principale si chiama master Per ogni nuova caratteristica da aggiungere al progetto Si crea un nuovo branch X dedicato Si esegue lo sviluppo su X Si effettua il merge (fusione) dei cambiamenti di X in master dott. Fabio Calefato 36 18

Operazioni su branch $ git branch $ git branch nome-feature $ git checkout nome-feature $ git push origin nome-feature $ git checkout master Elenca branch esistenti ed evidenzia quello corrente Crea nuovo branch a partire da quello corrente Passa nome-feature come branch corrente Ricrea il branch nomefeature sul repo remoto d origine Ritorna a master come branch corrente dott. Fabio Calefato 37 Operazioni su branch $ git merge nome-feature $ git branch d nome-feature $ git branch D nome-feature Porta le modifiche di nomefeature nel branch corrente Rimuove branch (verifica che sia stato fatto un merge prima) Forza rimozione branch (anche senza merge) dott. Fabio Calefato 38 19

Merge o rebase? Merge (three-way merge) Rebase Le revisioni D ed E in conflitto fuse con C rimangono memorizzate nella history La revisione D fusa con C, poi E è fusa con D e cancellata dalla history Il risultato delle fusion è identico (rev M == R) dott. Fabio Calefato 39 Che guaio ho copiato dei file che non voglio versionare in una cartella git! $ git clean f d Rimuove tutti i file e cartelle non versionate all interno di un repository git voglio scartare tutte le modifiche fatte nella cartella di progetto! $ git reset --hard HEAD ho dimenticato di aggiungere dei file all ultimo commit! $ git add 1.py 2.py $ git commit --amend [--no-edit - m "nuovo messaggio"] voglio cancellare gli ultimi N push sull origin! git revert --hard HEAD~N ma chi #** è stato?!? $ git blame fileincriminato.py dott. Fabio Calefato 40 20

Restituire modifiche dal clone all origin Premessa: modifiche devono essere state aggiunte al repo locale tramite comando commit Dopodiché $git push E necessario avere i permessi di scrittura sul repo origin remoto (non è sempre possibile) In tal caso occorre chiedere permesso attraverso una «pull request» (anche dette «merge request») Si inviano modifiche al proprietario dell origin che decide se e quando incorporarle Pull request vanno gestite via web sulla pagina di progetto dott. Fabio Calefato 41 Memorizzare comandi git Scaricare e tenere a portata un git cheat sheet Esempio: http://www.gittower.com/blog/git-cheatsheet-detail dott. Fabio Calefato 42 21

VCS BRANCHING dott. Fabio Calefato 43 Branch & project workflow Workflow dei progetti moderni supportato attraverso diversi branch Più grande e complesso un progetto, maggiore il numero Branch si distinguono per Durata della vita Stabilità del codice Direttamente proporzionali Più a lungo vive un branch, maggiore la stabilità dott. Fabio Calefato 44 22

Common branching workflow in git Main branch aka long-running master codice stabile, pronto per andare in produzione build stabili develop cambiamenti al codice, pronti per essere integrati nella prossima release build nightly Topic branch aka short-lived, supporting feature aggiunta di nuove funzionalità e.g., filedownload, logging issue risoluzione di un issue specifico e.g., issue3, iss91a, iss91v2 hotfix risoluzione di difetti gravi di codice in produzione dott. Fabio Calefato 45 dott. Fabio Calefato 46 23

WORKFLOW DECENTRALIZZATI CON DVCS dott. Fabio Calefato 47 Centralized workflow Possibile con VCS centralizzati e decentralizzati dott. Fabio Calefato 48 24

Integration-Manager workflow Possibile solo con VCS decentralizzati dott. Fabio Calefato 49 Dictator and Lieutenants Workflow Possibile solo con VCS decentralizzati dott. Fabio Calefato 50 25

Riferimenti Scott Chacon, Pro Git, Apress (2009), http://git-scm.com/book Atlassian git Tutorials, https://www.atlassian.com/git/tutorial/git-basics git Tutorial, http://www.vogella.com/tutorials/git/article.html A quick note on collaborative development models, https://help.github.com/articles/using-pull-requests A succesful Git branching model, http://nvie.com/posts/a-successful-git-branching-model dott. Fabio Calefato 51 26