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.

comments powered by Disqus