Libro Pragmatic Version Control Using Git

Copertina Libro Pragmatic Version Control using Git

Pragmatic Version Control Using Git è l’ultima pubblicazione sfornata da Pragmatic Bookshelf che, dopo a Pragmatic Version Control Using CVS e Pragmatic Version Control Using Subversion, abbraccia il campo dei DVCS pubblicando questo libro dedicato a Git.

Per chi non lo conoscesse, Git è un sistema di controllo delle versioni così come Subversion. In realtà, sebbene lo scopo finale sia comune, l’architettura di Git differisce alla base rispetto a Subversion poiché si tratta di un sistema distribuito che non necessita di far capo ad un repository principale. Ogni copia del repository, in gergo clone, è a tutti gli effetti un repository completo che include l’intera cronologia così come log, branch e quan’altro.

Pragmatic Version Control using Git si propone come una guida a diversi aspetti di Git che spaziano dall’apprendimento delle basi del funzionamento fino all’integrazione con strumenti di terze parti, passando per la creazione, gestione ed amministrazione di repository Git.

In Git le branch costituiscono uno degli elementi essenziali: non manca quindi un capitolo interamente dedicato aall’approfondimento di questo concetto che include sia le competenze tecniche essenziali per lavorare con le branch, sia nozioni di project management utili a comprendere quando e come dirottare lo sviluppo di un prodotto verso un ramo parallelo.

Confessa, non l’hai letto!

La pubblicazione del libro è estremamente recente e qualcuno di voi si potrebbe chiedere come sia possibile che io l’abbia già letto. Anzi, stando ad Amazon, la versione definitiva del libro non è ancora stata pubblicata.

Per abitudine, su questo blog ho sempre pubblicato fino ad ora recensione di libri che ho sfogliato personalmente e questo vale anche per Pragmatic Version Control Using Git. Ho cominciato ad usare Git già qualche mese prima che la Pragmatic Bookshelf pre-annunciasse la disponibilità del libro e, non appena possibile, mi sono precipitato ad acquistarne la beta in Pdf.

Ho assistito alla scrittura del libro fin dall’inizio, quando ancora era presente poco più che qualche capitolo.
E’ vero, in un certo senso è come sbirciare un regalo prima del compleanno, ma non ho saputo resistere. Non appena pubblicato, riceverò una versione cartacea che sarò bel lieto di conservare in libreria.

Questo mi ha permesso di preparare questa recensione con adeguato anticipo ed arricchirla con alcune considerazioni su capitoli e aneddoti pre-release.

Struttura del libro

Il libro è organizzato in due macro parti: Welcome to the Distributed World e Everyday Git.

La prima parte contiene alcuni capitoli d’introduzione ai software di controllo delle versioni distribuiti. L’autore, Travis Swicegood, analizza le caratteristiche alla base di questi prodotti accentuando i vantaggi rispetto ai tradizionali sistemi centralizzati come Subversion e CVS.

La seconda parte rappresenta invece il cuore del libro. Oltre 10 capitoli interamente dedicati a Git, dai comandi base fino all’interazione evoluta.
I temi affrontati includono:

  • Creazione ed amministrazione di repository
  • Utilizzo consapevole ed efficace di branch e tag
  • Esecuzione di merge tra branch differenti, con analisi delle varianti cherry-pick e squash
  • Gestione e risoluzione dei conflitti
  • Organizzazione di più repository ed integrazione di un sistema decentralizzato all’interno di un workflow aziendale strutturato
  • Installazione ed amministrazione di Git su server remoti
  • Interazione con repositori remoti
  • Analisi e consultazione della cronologia delle revisioni
  • Migrazione a Git, con particolare riferimento all’importazione di repository CVS e Subversion

Non solo tecnicismi

Una delle caratteristiche che più ho apprezzato di questo libro è la capacità di miscelare in ogni capitolo il giusto quantitativo di tecnicismi con esempi e nozioni di organizzazione. Git è uno strumento molto potente. Conoscere a memoria tutti i comandi non è sufficiente per apprezzarne tutte le caratteristiche. Per sfruttare al meglio Git è necessario sapere quando usare una caratteristica piuttosto che un’altra, quando organizzare la struttura con un repository intermedio ed in che modo.

Questo libro affronta l’uso di Git in modo globale. Non si limita ad elencare e commentare i comandi ma ne dimostra l’efficacia corredando ogni sezione da elementi di project management. Questa caratteristica espande il target del libro che può così spaziare da chi desidera conoscere l’uso di Git a chi già ne conosce i comandi ma non ha mai beneficiato di una formazione mentale sul corretto uso del software.

Git non è semplice

Chiunque vi dirà che “ad imparare Git ci vuole un attimo”, a mio avviso, pecca di presunzione. Conoscere a memoria uno o cento comandi è banale ma conoscere Git non è semplice, utilizzare Git non è immediato. La curva di apprendimento di Git è notevolmente più lunga di altri strumenti come ad esempio Subversion.

Il motivo è da ricondurre sia alla natura distribuita del software sia alle caratteristiche del software stesso. Potrebbe sembrare un controsenso ma apprendere l’uso di un sistema distribuito è tendenzialmente più complesso di un sistema centralizzato poiché a più potere corrispondono più funzioni e potenzialmente più problemi dedicati alla gestione del repository. Inoltre, paragonato ad altri sistemi distribuiti come Mercurial, la complessità di Git è maggiore e riconducibile ad una filosofia di sviluppo strettamente legata al mondo Linux da cui proviene.

Ne consegue che la lettura di questo libro, in alcuni capitoli, non è molto fluida. Sebbene Travis Swicegood abbia tentato di esporre al meglio l’argomento, in alcuni casi sono necessarie anche due o tre letture di una sezione per assimilarne al meglio il contenuto.

In conclusione

Come anticipato, Pragmatic Version Control using Git è una lettura consigliata sia per chi desidera avvicinarsi a Git, sia per chi già lo conosce ma sente l’esigenza di utilizzarlo in modo efficace ed efficiente.
E’ probabilmente una delle poche risorse complete sull’argomento in grado di offire una panoramica dalle basi alle funzionalità più evolute.

Gli utenti che provengono da altri SCM apprezzeranno senza dubbio i capitoli più discorsivi che offrono molto spesso confronti obiettivi con altri strumenti, in primo luogo Subversion. Agli utenti completamente a digiuno di SCM consiglio, prima della lettura, la visione dello [screencast su Git](http://peepcode.com/products/git “Git PeepCode Screencasts for Ruby on Rails Developers”) in vendita su Peepcode.

Dopo Git, Subversion e CVS spero che arrivi presto il momento di una pubblicazione dedicata a Mercurial.