Introduzione a GIT, il Version Control System by Linus Torvalds
Posted by Dibi Store Sat, 22 Dec 2007 10:27:00 GMT
Git è uno strumento che permette di tenere traccia delle versioni di sviluppo (e non solo) dei nostri files, in parole povere è un ottimo sostituto di svn.
Git è molto utile in quanto permette di tenere traccia dei nostri lavori in locale, senza quindi la necessità di un repository online, e sta avendo molti consensi da parte della community, in particolare, potete trovare un ottimo screencast nel sito peepcode.
In questo tutorial partirò dall' installazione di git, alla configurazione ed infine ad un esempio d'uso, che comunque vi consiglio di prendere in seria considerazione, ossia di tenere sempre una versione di rails a disposizione, completa di tutti i plugin che usiamo sempre, e ovviamente i nostri files di configurazione, come tra l'altro suggerito nel nuovo libro advanced rails recipes.
Installazione di GIT
Potete installare git direttamente da sorgente, scaricandolo direttamente dal sito ufficiale, oppure con il vostro packet manager preferito (in base alla vostra distribuzione).
In questo esempio mostrerò il semplice comando da eseguire nel caso abbiate a disposizione mac ports:
sudo port install git-core
Configurazione
La configurazione base di Git è semplice, di default vi basterà indicare il vostro nome e il vostro indirizzo email, in modo che possa essere visualizzato nel repository, comunque le configurazione potrete poi vederle nel file ~/.gitconfig
git config --global user.name "Del Ben Oscar"
git config --global user.email 'my@email.com'
Creiamo il progetto rails
Questo è semplice e dovreste già saperlo fare, comunque ora creerò un progetto rails, rinominerò il file config/database.yml in config/database.example.yml, rimuoverò i logs, i files temp e public/index.html:
rails rails
cd rails
mv config/database{,.example}.yml
rm log/*
rake tmp:clear
rm public/index.html
Pronti con Git!
Ora viene il bello, con il semplice comando git init, creeremo i files necessari per git, in pratica una directory .git contenente alcuni files interessanti, che siete liberi (anzi consiglio) di guardare, invece cosa molto utile è creare nella root del progetto il file .gitignore, in qui potremmo scrivere tutti i files che git dovrà ignorare:
touch .gitignore
Io ho aggiunto *.log ad esempio, ma nei vostri progetti aggiungete pure se necessario i files di database e informazioni che non devono essere contenuti nella versione salvata nel repository. Ora siamo pronti al primo commit (nel nostro repository locale), quindi con il prossimo comando, prima aggiungerò tutti i files (dobbiamo dire a git cosa includere) e poi eseguirò il commit:
git add .
git commit -m "Primo commit rails"
Ora è vostro compito aggiungere tutti quei plugin e files (anche javascript, css, ecc) che usate comunemente in tutte le vostre applicazioni, come titolo di esempio mostro come aggiungere il plugin will paginate:
./script/plugin install svn://errtheblog.com/svn/plugins/will_paginate
git status
git add vendor/
git commit -m "Aggiunto plugin will paginate"
Il comando git status vi dice che i files dovete aggiungerli a git, se volete salvarli nel repository ovviamente. Molto simile il comando git rm vi permette di rimuovere files se necessario ovviamente. Ripete l'operazione per tutti i plugins, files ecc che vi servono
La potenza dei branch
Qualunque persona che segua un progetto di qualsiasi dimensione, è abituato ad utilizzare almeno 2 versioni, una di sviluppo, e una di produzione. Ovviamente per fare cio, vengono solitamente tenute due directory separate, con git invece, abbiamo a disposizione una nuova feauture chiamata brench. In questo modo potremo usare piu versioni contemporaneamente, per vedere la versione che state usando, digitate semplicemente git brench. Per darvi un idea di cosa potete fare, create un nuovo branch con il comando:
git checkout test
Ora create un file qualsiasi dentro l'applicazione, salvatelo e aggiungetelo con il comando git add /path/to/file. Ovviamente committate, e poi tornate al branch master (quello creato di default), con il comando:
git checkout master
Magnifico! Il file non c'è più! Questo significa che avete a disposizione 2 ambienti completamente separati, e potete spostarvi da un all'altro quando volete. Vi starete domandando cosa accade se aggiungete un pezzo di codice in un file esistente nell'altro branch, provate pure! Inutile dire che potete poi aggiornare l'altro branch con le modifiche che nel frattempo avete fatto, in questo caso il comando è git rebase nome_branch, ma questo è già un concetto più avanzato (seppur semplice).
Conclusione
Ora sarete in grado di creare una copia della vostra applicazione in qualsiasi momento semplicemente con il comando git clone rails path/to/new/app. Ovviamente potrete nel corso del tempo modificare la vostra versione di rails in base alle vostre esigenze.


Ottimo articolo, anche se sarei non poco curioso di vedere utilizzi pratici. Io del tema non ne so molto anzi, ma vorrei capire come git gestisca la pox di avere diversi progetti, di mixarli per creare l'applicazione completa, o altre situazioni un pizzico più complesse. Se mi mandi a leggere la doc, mi sa che non ci vado :D. Bell'articolo!
Diciamo che in effetti la doc non può farti capire il vantaggio di uno strumento il più delle volte. Ti faccio un esempio pratico: immagina di avere 2 versioni dello stesso software, una stabile e una trunk che contiene una versione futura. Ora immagina che per qualche motivo (che alla fine rispecchia il più delle volte) esegui dei bug fixing o delle aggiunte alla versione stabile. Come fai ad allineare le versioni? Svn non è lo strumento adatto perchè non è stato pensato per quello, in quel caso ti serve un sistema distribuito, come ad esempio git o mercurial.