Git è un software di controllo versione distribuito utilizzabile da interfaccia a riga di comando, creato da Linus Torvalds nel 2005, ispirato da strumenti come BitKeeper e Monotone. Git nacque per essere un semplice strumento per facilitare lo sviluppo del kernel Linux ed è diventato lo strumento di controllo versione più diffuso.
GitHub offre un client desktop con interfaccia grafica per svolgere le principali funzioni sui repository. È inoltre presente una versione auto-aggiornante di Git da linea di comando, per gli scenari più avanzati.
Configurazione dell’utente valida per tutti i repository
$ git config --global user.name "[name]"
Imposta il nome che vuoi mostrare sulle tue commit
$ git config --global user.email "[email address]"
Imposta l’email che vuoi mostrare sulle tue commit
Crea un nuovo repository o clonane uno esistente da un URL
$ git init [project-name]
Crea un nuovo repository locale con il nome specificato
$ git clone [url]
Scarica un progetto esistente e il suo storico di cambiamenti
Rivedi i cambiamenti al codice e prepara una commit
$ git status
Elenca tutti i file nuovi o modificati
$ git diff
Mostra le differenze non ancora nell’area di staging
$ git add [file]
Crea uno snapshot del file in preparazione al versioning
$ git diff --staged
Mostra le differenze tra staging e ultima modifica
$ git reset [file]
Rimuovi un file dall’area di staging, ma mantieni le modifiche
$ git commit -m"[descriptive message]"
Salva gli snapshot dei file in maniera permanente nello storico
Aggrega una serie di commit all’interno di un branch
$ git branch
Elenca tutti i branch nel repository corrente
$ git branch [branch-name]
Crea un nuovo branch
$ git checkout [branch-name]
Passa al branch specificato e aggiorna la directory corrente
$ git merge [branch-name]
Unisci lo storico del branch specificato con quello corrente
$ git branch -d [branch-name]
Elimina il branch specificato
Ricerca e rimuovi file dallo storico
$ git rm [file]
Rimuovi un file dalla directory e prepara l’eliminazione definitiva
$ git rm --cached [file]
Elimina il file dallo storico di versione ma mantieni il file locale
$ git mv [file-original] [file-renamed]
Modifica il nome del file in preparazione a una commit
Escludi file e percorsi temporanei
*.log
build/
temp-*
Un file di testo chiamato .gitignore
previene il versioning
accidentale di file o directory secondo un pattern specificato.
$ git ls-files --others --ignored --exclude-standard
Elenca tutti i file ignorati in questo progetto
Archivia e ripristina cambiamenti incompleti
$ git stash
Archivia temporaneamente tutti i file modificati
$ git stash pop
Ripristina tutti i file modificati recentemente
$ git stash list
Elenca i set di cambiamenti archiviati
$ git stash drop
Elimina il set di cambiamenti più recente
Esplora l’evoluzione dei file del progetto
$ git log
Elenca lo storico di versione per il branch corrente
$ git log --follow [file]
Elenca lo storico di versione per il file specificato, incluse rinominazioni
$ git diff [first-branch]...[second-branch]
Mostra la differenza tra due branch
$ git show [commit]
Mostra i metadati e i cambiamenti della commit specificata
Elimina errori e altera lo storico dei cambiamenti
$ git reset [commit]
Annulla tutte le commit effettuate dopo [commit]
, preservando i
cambiamenti locali
$ git reset --hard [commit]
Elimina tutto lo storico e i cambiamenti fino alla commit specificata
Collegati a un URL remoto e ottieni lo storico dei cambiamenti
$ git fetch [remote]
Scarica lo storico dei cambiamenti dal repository remoto
$ git merge [remote]/[branch]
Unisci il branch remoto con quello locale
$ git push [remote] [branch]
Carica tutti i cambiamenti al branch locale su GitHub
$ git pull
Scarica lo storico e unisci i cambiamenti
Tradotto ed adattato da https://services.github.com/on-demand/downloads/github-git-cheat-sheet/ a cura di GitHub Learning Lab
crea una nuova directory, entraci ed esegui git init
per creare un nuovo repository git.
crea una copia di un repository locale eseguendo il comandogit clone /percorso/del/repository
usando invece un server remoto, il comando saràgit clone nomeutente@host:/percorso/del/repository
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 (o Stage) che fa da spazio di transito per i files e per finire l’HEAD che punta all’ultimo commit fatto.
Puoi proporre modifiche (aggiungendole all’Index) usandogit add <nomedelfile>
git add *
Questo è il primo passo nel flusso di lavoro in git.
Per validare queste modifiche fatte si usagit commit -m "Messaggio per la commit"
Ora il file è correttamente nell’HEAD, ma non ancora nel repository remoto.
Quello che hai cambiato ora è nell’HEAD della copia locale.
Per inviare queste modifiche al repository remoto, eseguigit push origin master
Se non hai copiato un repository esistente, e vuoi connettere il tuo repository ad un server remoto,
c’e’ bisogno che tu lo aggiunga congit remote add origin <server>
Ora sarai in grado di inviare le tue modifiche al server remoto specificato
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 “feature_x” e passa al nuovo branch usandogit checkout -b feature_x
ritorna di nuovo su mastergit checkout master
e cancella il branch creato in precedenzagit branch -d feature_x
il branch non sarà disponibile agli altri fino a quando
non verrà inviato al repository remotogit push origin <branch>
per aggiornare il tuo repository locale alla commit più recente, eseguigit pull
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), utilizzagit merge <branch>
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’ tramitegit add <nomedelfile>
prima di immettere le modifiche, potrai anche visualizzarne un’anteprima eseguendo :w
git diff <branch_sorgente> <branch_target>
È raccomandato creare dei tags nel caso in cui il software venga rilasciato.
Puoi creare un tag chiamato 1.0.0 eseguendogit tag 1.0.0 1b2e1d63ff
la sequenza 1b2e1d63ff sta per i primi 10 caratteri del commit che si vuol referenziare tramite questo tag.
Puoi ottenere l’id della commit tramitegit log
puoi anche utilizzare meno caratteri per l’id della commit, basta che sia unico.
Nel caso tu abbia fatto qualcosa di sbagliato (ma non capita mai, sicuro ;)
puoi sostituire i cambiamenti fatti in locale con il comandogit checkout -- <nomedelfile>
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.
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 modogit fetch origin
git reset --hard origin/master
colora gli output di gitgit config color.ui true
mostra il log in una riga per commitgit config format.pretty oneline
utilizza l’aggiunta interattivagit add -i
Tradotto ed adattato da git - the simple guide
Git Community E-Book
Professional Git
Think like a git
(forse è meglio di no, git nello slang americano vuol dire idiota)
GitHub Help
Visual Git