Git for dummies

19

Click here to load reader

Transcript of Git for dummies

Page 1: Git for dummies

Git for Dummies

a cura di Claudio Mignanti

Copyright CC-BY-SA

Page 2: Git for dummies

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

Page 3: Git for dummies

Lista dei comandi essenziali

git init git config git status, git commit gitk git branch git merge git cherry-pick, git rebase git {push,pull,fetch} git remote, git clone

Page 4: Git for dummies

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

Page 5: Git for dummies

GIT CONFIG

Configurare la mail e il nome con cui firmerete i commit.

git config user.name "Gatto Silvestro"

git config user.email [email protected]

Page 6: Git for dummies

GIT STATUS, GIT COMMIT

$ touch newfile

$ git status

# Untracked files: ...

# newfile

$ git add newfile

$ git commit --message="aggiungo newfile"

[master (root-commit) 7e6c98e] aggiungo newfile

TODO: provare le stesse cose

usando $ git gui

Page 7: Git for dummies

GITK

$ gitk –all

Commit selezionato

Storia del repository

ID sha1 del commit selezionato

Modifiche e commenti del Commit in questione

Page 8: Git for dummies

GIT BRANCH

$ git checkout 5d53347a5 -b wip #creo branch wip

un po di commit sia su master che su wip e ottengo...

Con $ git branch <nome> seleziono il branch su cui lavorare

Branch wip (attivo in grassetto) con due commit nuoviBranch master con un nuovo commit

Il file pluto esiste subranch wip ma non su master

Pippo esiste su master ma non su wip

Commit attivo in giallo

Page 9: Git for dummies

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

Page 10: Git for dummies

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

Page 11: Git for dummies

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)

Page 12: Git for dummies

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

Page 13: Git for dummies

GIT REBASE, GIT CHERRY-PICK

Prima del rebase erano4 commit in questo ordine

Come prima cosa ho messo il makefileHo aggiunto pluto prima di pippo riordinandoliHo ”fuso” 78a98d7 con aa044574 con squash

Page 14: Git for dummies

GIT REBASE, GIT CHERRY-PICK

Come prima cosa ho messo il makefileHo aggiunto pluto prima di pippo riordinandoliHo ”fuso” 78a98d7 con aa044574 con squash

Page 15: Git for dummies

Mhhh

Per essere un git for dummies si è complicato abbastanza

Il tutto con solo 4 commit :)

Page 16: Git for dummies

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.

Page 17: Git for dummies

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

Page 18: Git for dummies

Un caso reale

Page 19: Git for dummies

EOF

?

Copyright CC-BY-SAClaudio Mignanti <c.mignanti gmail.com>