Wikipedia recita:
Git è un sistema software di controllo di versione distribuito, creato da Linus Torvalds nel 2005.
Al giorno d’oggi mi trovo di continuo ad usare GIT come sistema di controllo versioni (o backup) sopratutto per progetti software in quanto il suo uso ideale è con i file di testo. Tuttavia prima di scoprirlo a fondo bisogna superare il panico iniziale della riga di comando, anche se, ci sono alternative con interfaccia ma decine di azioni e di pulsanti da provare e sperimentare non sono l’ideale quando si ha a che fare con importanti file sorgenti ed algoritmi.
Iniziamo con l’installazione: sul blog trovate già alcuni tutorial, anche video su come installare il tutto quindi facciamo un passo avanti veloce…
Creazione di un nuovo repository
crea una nuova directory, entraci ed esegui
[code lang=”bash”]git init[/code]
per creare un nuovo repository git.
Checkout di un repository
crea una copia di un repository locale eseguendo il comando
[code lang=”bash”]git clone /percorso/del/repository[/code]
usando invece un server remoto, il comando sarà
[code lang=”bash”]git clone nomeutente@host:/percorso/del/repository[/code]
Ambiente di lavoro
La tua copia locale del repository è composta da tre “alberi” mantenuti da git. Il primo è la tua Directory di lavoro che contiene i files attuali. Il secondo è l’Index che fa da spazio di transito per i files e per finire l’HEAD che punta all’ultimo commit fatto.
Aggiungere & validare
Puoi proporre modifiche (aggiungendole all’Index) usando
[code lang=”bash”]git add <nomedelfile>
git add *[/code]
Questo è il primo passo nel flusso di lavoro in git. Per validare queste modifiche fatte si usa
[code lang=”bash”]git commit -m "Messaggio per il commit"[/code]
Ora il file è correttamente nell’HEAD, ma non ancora nel repository remoto.
Invio delle modifiche
Quello che hai cambiato ora è nell’HEAD della copia locale. Per inviare queste modifiche al repository remoto, esegui
[code lang=”bash”]git push origin master[/code]
Cambia master nel branch al quale vuoi inviare i cambiamenti.
Se non hai copiato un repository esistente, e vuoi connettere il tuo repository ad un server remoto, c’e’ bisogno che tu lo aggiunga con
[code lang=”bash”]git remote add origin <server>[/code]
Ora sarai in grado di inviare le tue modifiche al server remoto specificato
Branching
I branch (‘ramificazioni’) sono utilizzati per sviluppare features che sono isolate l’una dall’altra. Il branch master è quello di default quando crei un repository. Puoi usare altri branch per lo sviluppo ed infine incorporarli (‘merge’) nel master branch una volta completati.
crea un nuovo branch chiamato “nice_feature” e passa al nuovo branch usando
[code lang=”bash”]git checkout -b nice_feature[/code]
ritorna di nuovo su master
[code lang=”bash”]git checkout master[/code]
e cancella il branch creato in precedenza
[code lang=”bash”]git branch -d nice_feature[/code]
il branch non sarà disponibile agli altri fino a quando non verrà inviato al repository remoto
[code lang=”bash”]git push origin <branch>[/code]
Aggiorna & incorpora
per aggiornare il tuo repository locale alla commit più recente, esegui
[code lang=”bash”]git pull[/code]
nella tua directory corrente per fare una fetch (recuperare) ed incorporare(merge) le modifiche fatte sul server remoto.
per incorporare un altro branch nel tuo branch attivo (ad esempio master), utilizza
[code lang=”bash”]git merge [/code]
in entrambi i casi git prova ad auto-incorporare le modifiche. Sfortunatamente, a volte questa procedura automatizzata non è possibile, ed in questo caso ci saranno dei conflitti. Sei tu il responsabile che sistemerà questi conflitti manualmente modificando i file che git mostrerà. Dopo aver cambiato questi files, dovrai marcarli come “correttamente incorporati” tramite
[code lang=”bash”]git add [/code]
prima di immettere le modifiche, potrai anche visualizzarne un’anteprima eseguendo
[code lang=”bash”]git diff <branch_sorgente> <branch_target>[/code]
Tags
tags
È raccomandato creare dei tags nel caso in cui il software venga rilasciato. Questo è un concept già conosciuto, che esiste anche in SVN. Puoi creare un tag chiamato 1.0.0 eseguendo
[code lang=”bash”]git tag 1.0.0 1b2e1d63ff[/code]
la sequenza 1b2e1d63ff sta per i primi 10 caratteri del commit che si vuol referenziare tramite questo tag. Puoi ottenere l’id della commit tramite
[code lang=”bash”]git log[/code]
Se hai invece già eseguito molti commit aggiungi il parametro –oneline al comando log per avere una visione più chiara. Puoi anche utilizzare meno caratteri per l’id della commit, basta che sia unico.
Ripristino cambiamenti locali
Nel caso tu abbia fatto qualcosa di sbagliato (non capita mai, vero?) puoi sostituire i cambiamenti fatti in locale con il comando
[code lang=”bash”]git checkout — <nomedelfile>[/code]
questo rimpiazza le modifiche nell’albero di lavoro con l’ultimo contenuto presente in HEAD. I cambiamenti fatti ed aggiunti all’index, così come i nuovi files, verranno mantenuti. I caratteri “–” indicano l’ultimo commit, per tornare ad una versione più vecchia basta sostituirli con l’hash del commit (ottenibile dal comando log)
Se vuoi in alternativa eliminare tutti i cambiamenti e commits fatti in locale, recupera l’ultima versione dal server e fai puntare il tuo master branch a quella versione in questo modo
[code lang=”bash”]git fetch origin
git reset –hard origin/master[/code]
Suggerimenti utili
GUI (Interfaccia utente grafica) per git disponibile di default: gitk
colora gli output di git
[code lang=”bash”]git config color.ui true[/code]
mostra il log in una riga per commit
[code lang=”bash”]git config format.pretty oneline[/code]
utilizza l’aggiunta interattiva
[code lang=”bash”]git add -i[/code]
Imparate le basi ora è semplice usare programmi come GitBox o SourceTree o GitHub per la gestione.
Questo memorandum sono sicuro che ti tornerà utile, inseriscilo tra i preferiti e condividilo sui social ai tuoi amici aspiranti programmatori!