1. Git for Dummies
a cura di Claudio Mignanti
Copyright CC-BY-SA
2. In{troduzione,stallazione}
Git è un sistema software di controllo versione
distribuito, direttamente utilizzabile da riga di
comando.
Git è un termine gergale britannico per indicare una persona stupida
o sgradevole, a causa della difficoltà di utilizzo delle prime versioni, il
programma è stato definito "il sistema di controllo versione progettato
per farti sentire più stupido di quanto tu non sia".
Installazione su debian based:
apt-get install git-core gitk git-gui
4. GIT INIT
Git si presenta come un sistema distribuito,
ogni copia del repository git rappresenta una
copia completa e indistinguibile. NON è
un'architettura client-server!
$ mkdir /tmp/test; cd /tmp/test
$ git init
Initialized empty Git repository in
/tmp/test/.git/
La cartella /tmp/test contiene un nuovo git
repository
5. GIT CONFIG
Configurare la mail e il nome con cui firmerete i
commit.
git config user.name "Gatto Silvestro"
git config user.email gatto.s@cartoon.com
7. GITK
Storia del repository
$ gitk –all
Commit selezionato
ID sha1 del commit
selezionato
Modifiche e commenti del
Commit in questione
8. GIT BRANCH
$ git checkout 5d53347a5 -b wip #creo branch wip
un po di commit sia su master che su wip e
ottengo...
Branch wip (attivo in grassetto) con due commit nuovi
Branch master con un nuovo commit
Commit attivo in giallo
Il file pluto esiste su
branch wip ma non su master
Pippo esiste su master ma non su wip
Con $ git branch <nome> seleziono il branch su
cui lavorare
9. GIT MERGE
Per unire le modifiche di due branch diversi uso
merge
$ git checkout master
$ git merge wip
Merge made by recursive.
pluto | 2 ++
1 files changed, 2 insertions(+), 0 deletions(-)
create mode 100644 pluto
10. GIT REBASE, GIT CHERRY-PICK
Supponiamo di voler prelevare UN commit da
un branch per metterlo in cima ad un'altro
branch
$ git checkout 7e6c98ed0 -b fork
Switched to a new branch 'fork'
$ git commit --message="aggiunto makefile"
[fork 4768253] aggiunto makefile
$ git checkout master
Switched to branch 'master'
$ git cherry-pick 4768253
11. GIT REBASE, GIT CHERRY-PICK
Prima del cherry-pick
Una copia del commit
iniziale è posta in cima
al branch master.
Il commit iniziale con
hash 4768253 non è
stato spostato
ne i commit
successivi/precedenti (se ci
sono) sono entrati a far parte di
master (come nel merge)
12. GIT REBASE, GIT CHERRY-PICK
Con $ git rebase -i <sha id>
Possiamo riordinare, fondere, o eliminare commit
che sono tra il checkout attuale e <sha id>
$ git checkout master
$ git branch pre-rebase #salvo la situazione su nuovo branch
$ git rebase -i 5d53347a5
13. GIT REBASE, GIT CHERRY-PICK
Come prima cosa ho messo il makefile
Ho aggiunto pluto prima di pippo
riordinandoli
Ho ”fuso” 78a98d7 con aa044574 con
squash
Prima del rebase erano
4 commit in questo ordine
14. GIT REBASE, GIT CHERRY-PICK
Come prima cosa ho messo il makefile
Ho aggiunto pluto prima di pippo
riordinandoli
Ho ”fuso” 78a98d7 con aa044574 con
squash
15. Mhhh
Per essere un git for dummies si è complicato
abbastanza
Il tutto con solo 4 commit :)
16. GIT {PUSH, PULL, FETCH}
Quando ci si vuole sincronizzare con un
repository remoto si usano questi comandi.
git push invia i cambiamanti locali in remoto.
git fetch preleva i cambiamente remoti SENZA
applicarli in locale (così puoi ispezzionarli...)
git pull è come git fetch ma applica i
cambiamenti remoti in locale
Git è decentralizzato quindi ogni copia può
essere vista come un repository remoto.
17. GIT REMOTE, GIT CLONE
git remote ti permette di gestire i repository
remoti.
Es:
git remote add test http://mysite.org/git/test
git clone si può usare per clonare un repository
remoto noto e configurare automaticamente i
riferimenti remoti (senza usare git remote)
Es:
git clone http://mysite.org/git/test