In questi giorni ho approfondito molto Git ed ho cominciato a comprendere realmente cosa vuol dire usare un VCS.
Sebbene nei miei progetti io non abbia ancora avuto la necessità di creare e mergere dei branch (anche se ho capito come funzionano e quali sono i concetti che ci stanno dietro).
Solo che in questo periodo mi chiedevo se fosse sensato per me usare Git, che è un VCS distribuito oppure se avessi dovuto documentarmi su qualcosa come Subversion o CVS.
Dopotutto io devo solo tener traccia dei miei sorgenti, quello che mi interessava e che potessi avere una copia remota in modo da poter uploadare i miei sorgenti altrove per
- Averne un backup
- Poterli pubblicare senza troppi problemi (se, per esempio, ho spazio web sulla macchina che ospita il repository)
Ma appunto, in genere ci devo lavorare solo io o al massimo qualcun’altro. E tutti i VCS vanno bene per far lavorare altra gente sui propri sorgenti.
Prima di stasera stavo per rivolgermi a qualcos’altro, pensando che Git non fosse quello che mi serviva.
Il punto era: distribuito? Mi va bene qualcosa di normale.
Stasera però, guardando il talk tenuto da Linus Torvalds presso uno degli uffici di Google tutto mi sta sembrando chiaro.
[Per la cronaca il talk (in inglese, figata, Torvalds è divertentissimo) è reperibile a http://www.youtube.com/watch?v=4XpnKHJAok8#, ma penso che ora lo scarico]
Più che altro perchè ora sto capendo qual’è la differenza tra distribuito e centralizzato.
Sembrerà una cosa ovvia e stupida, ma voglio spiegarla.
Perchè, per esempio, io avevo usato in passato CVS per tornare indietro ad una certa versione di un repository, e facendo delle operazioni simili con Git mi era sembrato apparentemente tutto uguale. Apparentemente, appunto.
Perchè apparentemente ?
Quello che non avevo notato era il tempo che CVS impiegava a compiere l’operazione.
Con CVS, SVN e gli altri VCS centralizzati quello che succede è: c’è un server centrale (altrimenti non si chiamerebbero centralizzati) ed ogni volta che fai un commit, o un checkout, ogni volta che torni indietro nella cronologia delle modifiche di un sorgente, ogni volta che crei un branch o che ne fai il merge, ogni volta che fai un’operazione contatti il server (che tiene traccia di tutto) e il tuo client, insieme al server, fanno quello che devono fare.
Che vuol dire? Che le operazioni avvengono tutte via rete, e per lavorare con un VCS centralizzato devi essere collegato ad internet, o comunque alla rete in cui c’è l’host che contiene il server.
Ok??
Nei sistemi distribuiti è diverso (e grazie al cazzo, aggiungerà il lettore).
Quando un utente git «clona» (scusate la teminologia git-tiana) un repository, insieme ad esso clona tutto il repository, ovvero: codici sorgente ed altri oggetti, branch principale e tutti gli altri branch, cronologia del branch principale e di tutti gli altri branch, insomma tutto quanto.
Quindi, si può lavorare tranquillamente anche off-line. Si può sfogliare la cronologia, creare branch (che rimarranno solo in locale, se vogliamo), fare il merge dei branch creati, tornare in dietro. Insomma: si può fare tutto quello che si vuole perchè si lavora in locale.
Quando hai finito, semplicemente fai il push, cioè aggiorni la tua copia pubblica, quella a cui gli altri hanno accesso. Da lì poi, gli altri si sincronizzeranno. Quando tu sincronizzi quella copia scarichi le modifiche che hanno fatto gli altri e via dicendo.
C’è da dire inoltre, che ogni repository git è uguale a quello da cui è stato clonato: non c’è un client e un server con importanza diversa: tutte le copie del repository sono uguali. Insomma: c’è uguaglianza tra gli sviluppatori.
Anche l’aspetto sicurezza è garantita. Ora sarebbe lunghetta da spiegare, ma comunque rimando al video, è una vera manna di informazioni.
Torvalds mi ha convinto, anche se voglio provare Mercurial.
Perchè ? Beh… Nel video sopra-citato Torvalds ha letteralmente coperto di merda CVS, Subversion e la gente che ha scritto questi tue.
Mentre invece ha parlato abbastanza bene di Mercurial.
C’è da dire che Torvalds è un tipo che ovviamente i VCS li usa pesantemente, per tenere traccia dello sviluppo del kernel.
A quanto ho capito li ha provati un po’ tutti e poi non contento ha scritto il suo.
Proprio mentre finisco di scrivere sta finendo il video… Ora lo metto a scaricare.
Saluti,
Elric