Indice

Version Control personale con Bazaar

:!: La guida ora è anche scaricabile in pdf, 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 (Version Control SystemVCS). 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

Il logo di Bazaar

Esistono vari VCS open-source più o meno affermati, personalmente ho apprezzato le funzionalità di Bazaar (http://bazaar-vcs.org/), un progetto di 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 <mail omessa>"

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):

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 <mail omessa>
branch nick: vcs
timestamp: Sun 2008-11-02 16:02:35 +0100
message:
  Nuova versione con tag DokuWiki
------------------------------------------------------------
revno: 2
committer: Nicola Poluzzi <mail omessa>
branch nick: vcs
timestamp: Sat 2008-11-01 20:41:30 +0100
message:
  Varie
------------------------------------------------------------
revno: 1
committer: Nicola Poluzzi <mail omessa>
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.

Una GUI per Bazaar

Un elenco di strumenti grafici per usare Bazaar può essere trovato 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 guida ufficiale è molto ben fatta, e mostra anche modelli di utilizzo differenti da quello dell'utente singolo qui analizzato. 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 documentazione.

Questa è un documento in divenire, al momento ancora acerbo. Se vuoi fare dei commenti, suggerire o partecipare in qualche modo, scrivimi!

Download

La guida è scaricabile anche in formato pdf, per una consultazione più comoda e la stampa. La licenza d'uso è la CreativeCommons Attribuzione-Non commerciale-Condividi allo stesso modo 2.5 Italia.

Scarica la guida in pdf