====== Version Control personale con Bazaar ====== :!: La guida ora è anche scaricabile in pdf, [[#download|clicca qui]] In varie occasioni può rivelarsi utile tenere traccia delle modifiche effettuate nel tempo su alcuni documenti. Ad esempio durante la scrittura di una tesi di laurea o di qualche altro documento, in cui i testi, le immagini e le modifiche cominciano ad accavallarsi; oppure nello sviluppo di un software. Allo scopo esistono degli strumenti che i programmatori conoscono bene, denominati **sistemi di controllo delle versioni** ([[wp>Version_control_system|Version Control System]] – **VCS**). Generalmente questi strumenti vengono utilizzati per coordinare il lavoro di gruppo, in cui più utenti in ogni parte del mondo contribuiscono alla scrittura dello stesso codice, e necessitano quindi di un sistema comune per gestire il lavoro prodotto. Tuttavia un VCS può essere usato anche da un utente singolo, su un'unica postazione di lavoro, ad esempio per gli scopi di cui abbiamo discusso poco fa. Questo è l'aspetto che ci interessa. ===== Bazaar ===== {{guide:bazaarlogo.png|Il logo di Bazaar}} Esistono vari VCS open-source più o meno affermati, personalmente ho apprezzato le funzionalità di [[http://bazaar-vcs.org/|Bazaar]] (http://bazaar-vcs.org/), un progetto di [[http://www.canonical.com/|Canonical]] (azienda che sviluppa anche il famoso Ubuntu Linux), quindi di seguito vedremo come usare Bazaar per tenere sotto controllo le revisioni dei nostri documenti. Partiremo usando Bazaar da riga di comando, benché esistano vari tool grafici per utilizzare il software, per comprendere meglio i passi necessari per l'uso dello strumento. ===== Configurare Bazaar ===== Preparare Bazaar per il lavoro è questione di un attimo. Basta scaricare il pacchetto per il proprio sistema operativo dal sito ufficiale, installarlo, ed indicare a Bazaar chi siamo (cosa che, in realtà, serve più che altro per il lavoro di gruppo). Per farlo, da una shell eseguiamo Bazaar nel seguente modo: diaspar:~ poluz$ bzr whoami "Nicola Poluzzi " ===== Avviare un progetto ===== Creiamo una cartella per ospitare il nostro lavoro. Al momento la chiamiamo un po' tristemente ''test''. Sempre nella nostra shell dei comandi, informiamo Bazaar che abbiamo intenzione di tenere sotto controllo le revisioni dei documenti al suo interno. ''bzr init'' è il comando che dobbiamo lanciare. diaspar:test poluz$ bzr init Standalone tree (format: pack-0.92) Location: branch root: . Ora è il momento di creare qualche contenuto. Inserite file, scrivete testo, fate quello che volete. Quando vi sembrerà di aver raggiunto un primo stadio del lavoro, è il momento di «depositare» ciò che avete fatto. ===== Il primo commit ===== L'operazione di deposito di una revisione è chiamato **commit**. Prima però dobbiamo fare in modo che Bazaar guardi che cosa è stato fatto. Il comando ''bzr add'' indica a Bazaar quali file deve tenere sotto controllo. diaspar:test poluz$ bzr add added vcs.txt Nel mio caso sono stato un po' pigro, ed ho creato solo un file. Vabbè, è la mia base di partenza, eseguo il commit con ''bzr commit'': diaspar:test poluz$ bzr commit -m "Prima parte" Committing to: /Users/poluz/Desktop/test/ added comandi console.txt Committed revision 1. Il parametro tra virgolette dopo la flag ''-m'' è un commento che serve per tenere una traccia mnemonica del lavoro appena svolto. ===== Nuove modifiche e visualizzazione delle differenze ===== Ora proseguendo con il lavoro creo qualche altro file. Come prima, voglio che anche questi file vengano versionati da Bazaar, quindi lancio nuovamente il comando ''bzr add'' per aggiungerli alla lista dei documenti controllati. diaspar:test poluz$ bzr add added "comandi console.txt" Nel caso desideri sapere che cosa ho modificato rispetto alla versione «depositata» in precedenza, basta che lanci il comando ''bzr diff'': diaspar:test poluz$ bzr diff === added file 'comandi console.txt' +++ comandi console.txt 2008-11-01 19:01:14 +0000 @@ -0,0 +1,23 @@ +diaspar:test poluz$ bzr init +Standalone tree (format: pack-0.92) +Location: + branch root: . È vero, a riga di comando si capisce poco, però risulta chiaro che ho aggiunto un file, con il contenuto indicato (i ''+'' all'inizio delle righe indicano le righe aggiunte rispetto alla versione precedente). Ecco una versione un po' più leggibile di un ''bzr diff'' (ma c'è anche di meglio): {{guide:bazaardiff.png?490|Un diff visualizzato}} ===== Nuove revisioni ===== Bene, se ho raggiunto un altro stadio del mio lavoro, lancio nuovamente ''bzr commit'' per depositare il mio lavoro, creando una nuova revisione. A questo punto, come faccio a sapere quante revisioni ho depositato, e quando? Il comando ''bzr log'' fa proprio al caso nostro. diaspar:vcs poluz$ bzr log ------------------------------------------------------------ revno: 3 committer: Nicola Poluzzi branch nick: vcs timestamp: Sun 2008-11-02 16:02:35 +0100 message: Nuova versione con tag DokuWiki ------------------------------------------------------------ revno: 2 committer: Nicola Poluzzi branch nick: vcs timestamp: Sat 2008-11-01 20:41:30 +0100 message: Varie ------------------------------------------------------------ revno: 1 committer: Nicola Poluzzi branch nick: test timestamp: Sat 2008-11-01 20:04:28 +0100 message: Prima parte Toh, ho fatto anche un altro commit senza dirvi niente (ed ho pure cambiato nome alla directory del progetto)! Ora, se lancio nuovamente ''bzr diff'' vedrò i cambiamenti effettuati tra la revisione 2 e la 3. Se volessi vedere quelli tra la 1 e la 2, invece, basterà lanciare il comando ''bzr diff -r 1..2''. Il parametro della flag ''-r'' specifica tra quali versioni visualizzare le differenze. ===== Riparare gli errori commessi ===== Ecco, fatta la frittata, vorrei tornare indietro nel tempo. Intanto, vediamo che cosa ho avevo di buono nelle vecchie versioni, prima di aver fatto il danno. Bazaar ha salvato tutto il nostro lavoro sino ad ora, perciò è questione di un attimo tornare indietro ad una versione precedente. Ad esempio, lanciamo il seguente comando: diaspar:vcs poluz$ bzr cat -r 2 vcs.txt Magia! Ecco il file ''vcs.txt'' come era quando abbiamo eseguito il secondo commit! Ovviamente possiamo recuperare altre versioni cambiando il numero di revisione dopo la flag ''-r'', oppure altri file, cambiando il nome del file. A questo punto, potete decidere di copiare a mano il testo dalla revisione precedente alla versione corrente, oppure di recuperare //tout-court// il file di una revisione (magari perché il file l'avete proprio cancellato). Per fare ciò usiamo uno strumento tipico delle shell unix, ovvero la ridirezione dell'output. diaspar:vcs poluz$ bzr cat -r 3 vcs.txt > vcs.txt Il valore dopo il simbolo di maggiore ''>'', indica il file che accoglierà il contenuto recuperato da una revisione. Notate che questo può essere fatto anche nel caso di file binari, come immagini, video, audio, ecc... Facile no? Utilizzando ''bzr merge'', inoltre, si possono recuperare in maniera semi-automatica solo alcune parti delle vecchie revisioni, ovvero quelle modificate, mantenendo intatto il resto del documento. L'uso di questa funzionalità al momento esula dallo scopo di questa guida, tuttavia troverete che i vari tool grafici per Bazaar mettono a disposizione una comoda interfaccia per l'uso di questa funzionalità. ===== Interfacce grafiche ===== La linea di comando ci è stata utile per imparare le basi di Bazaar, ma esistono strumenti molto più comodi per ottenere gli stessi risultati. Guardate ad esempio come questo menu raccoglie tutte le cose che abbiamo fatto poco fa (e molto di più!) a portata di un click. {{ guide:bazaareclipse.png |Una GUI per Bazaar}} Un elenco di strumenti grafici per usare Bazaar può essere trovato [[http://bazaar-vcs.org/3rdPartyTools|qui]]. Magari ne avete già qualcuno installato, e non ve ne siete accorti. Provate a lanciare ''bzr qbzr'' e guardate che succede. ===== Dove sta il segreto ===== Bazaar dove tiene nascosto tutto lo storico del nostro lavoro? Beh, guardate nella cartella del vostro lavoro, troverete una directory nascosta chiamata ''.bzr''. Lì c'è tutto l'archivio. Guardate ma non toccate, se no potete dire addio alle vostre revisioni. ===== Approfondimenti ===== La documentazione di Bazaar al momento è quasi tutta in inglese. Tuttavia la [[http://doc.bazaar-vcs.org/bzr.dev/en/user-guide/index.html|guida ufficiale]] è molto ben fatta, e mostra anche modelli di utilizzo differenti da quello dell'utente singolo qui analizzato. [[http://doc.bazaar-vcs.org/bzr.dev/en/mini-tutorial/index.html|Bazaar in five minutes]] è invece un tutorial per iniziare rapidamente ad usare Bazaar, da cui ho preso spunto per questa mia breve guida. Per altri documenti, vedi la pagina della [[http://bazaar-vcs.org/Documentation|documentazione]]. Questa è un documento in divenire, al momento ancora acerbo. Se vuoi fare dei commenti, suggerire o partecipare in qualche modo, [[:scrivimi|scrivimi]]! ===== Download ===== La guida è scaricabile anche in formato pdf, per una consultazione più comoda e la stampa. La licenza d'uso è la [[http://creativecommons.org/licenses/by-nc-sa/2.5/it/deed.it|CreativeCommons Attribuzione-Non commerciale-Condividi allo stesso modo 2.5 Italia]]. {{guide:bazaar.pdf|Scarica la guida in pdf}}