Shell Magic/ Versioning per tutti
I desktop GNU/Linux e Unix in generale migliorano continuamente. Ci sono comode interfacce grafiche per compiere praticamente qualunque compito. Ma in realtà Unix ha un’interfaccia molto più potente e altrettanto (se non maggiormente) completa. Si tratta della shell, l’interfaccia testuale a riga di comando che spaventa l’utente comune ma è la “casa” naturale dell’utente evoluto, e che permette di utilizzare e combinare quei “mattoncini” che sono le utility aderenti alla filosofia Unix: fare una cosa sola e farla bene.
Spesso capita di avere dei file, prevalentemente di natura testuale (appunti, configurazioni, documenti, output di altri software ecc.), che devono essere modificati nel tempo, ma di volerne tenere una copia di riserva per poter annullare le modifiche o mantenere uno storico dei cambiamenti per qualche motivo. Così finiamo con avere delle directory piene di file con suffissi “old”, “backup”, “20100610”, ecc. e di queste copie, dopo poco tempo, si perde il filo.
La soluzione è usare un sistema di versioning. Ne conoscono l’utilità soprattutto gli sviluppatori, che gestiscono i loro progetti con potenti e complessi sistemi quali CVS, Subversion o MS SourceSafe. In realtà ci sono anche sistemi di versionamento molto semplici, utilissimi per tenere traccia delle modifiche ai singoli file. RCS (Revision Control System) è uno di questi ed è presente praticamente su tutti i sistemi Unix. Sulla mia Kubuntu Lucid lo si installa con il classico comando
sudo apt-get install rcs
Io ho scritto il mio curriculum in Latex, che è un file di testo dal
quale posso poi ottenere PDF e altri formati, quindi l’ideale per il
versionamento con RCS. Supponento di avere il file cv.tex
nella
directory cv/
, la prima cosa che conviene fare è creare in
quest’ultima la sottodirectory cv/RCS/
, così il sistema va a scriverci
i suoi file e non “intasa” la directory di lavoro.
Importare il file in RCS è semplicissimo:
ci -u cv.tex
Questo comando esegue il check-in del file nel sistema di
versionamento, lasciandone una copia in sola lettura (grazie
all’opzione -u
) nella directory di lavoro. Per lavorare di nuovo sul
file occorre ottenere un lock:
co -l cv.tex
Una volta fatte tutte le modifiche del caso si ripete il check-in con
il comando ci
. Durante il check-in viene chiesto un commento in modo
da ricordarsi i cambiamenti effettuati e sapere di che versione si
tratta. Con il comando rlog
possiamo poi consultare lo storico dei
cambiamenti, per esempio così:
rlog RCS/*
Se vogliamo estrarre una vecchia versione è sufficiente eseguire il
check-out con l’opzione -r
e il numero della versione richiesta:
co -r1.5 cv.tex
Usando RCS salveremo tutte le versioni di un certo file, potremo sempre ritornare a una vecchia versione, vedere le differenze fra versioni diverse e tutto senza intasare la directory di lavoro con file di backup dai nomi oscuri e incomprensibili.