SlideShare uma empresa Scribd logo
1 de 19
Baixar para ler offline
Git for Dummies




                  a cura di Claudio Mignanti
                       Copyright CC-BY-SA
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
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
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
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
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
GITK
                           Storia del repository
  $ gitk –all



 Commit selezionato




ID sha1 del commit
selezionato




Modifiche e commenti del
Commit in questione
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
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
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
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)
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
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
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
Mhhh

 Per essere un git for dummies si è complicato
                  abbastanza




                 Il tutto con solo 4 commit :)
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.
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
Un caso reale
EOF




                 ?

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

Mais conteúdo relacionado

Mais procurados

Git Flow - Un modello di branching che funziona
Git Flow - Un modello di branching che funzionaGit Flow - Un modello di branching che funziona
Git Flow - Un modello di branching che funziona
Innoteam Srl
 
Corso Python Deltapromo - Lezione 3
Corso Python Deltapromo - Lezione 3Corso Python Deltapromo - Lezione 3
Corso Python Deltapromo - Lezione 3
Paolo Ferretti
 

Mais procurados (20)

Revisionare, tracciare, collaborare. Version control con git
Revisionare, tracciare, collaborare. Version control con gitRevisionare, tracciare, collaborare. Version control con git
Revisionare, tracciare, collaborare. Version control con git
 
Git e GitHub - L'essenziale
Git e GitHub - L'essenziale Git e GitHub - L'essenziale
Git e GitHub - L'essenziale
 
Perchè Git?
Perchè Git?Perchè Git?
Perchè Git?
 
Git – lo stupido gestore di contenuti
Git – lo stupido gestore di contenutiGit – lo stupido gestore di contenuti
Git – lo stupido gestore di contenuti
 
Git/Continuous Integration/Docker: la terna dello sviluppo moderno.
Git/Continuous Integration/Docker: la terna dello sviluppo moderno.Git/Continuous Integration/Docker: la terna dello sviluppo moderno.
Git/Continuous Integration/Docker: la terna dello sviluppo moderno.
 
Emerasoft Git quickstart
Emerasoft Git quickstartEmerasoft Git quickstart
Emerasoft Git quickstart
 
TuxIsAlive
TuxIsAliveTuxIsAlive
TuxIsAlive
 
Git Flow - Un modello di branching che funziona
Git Flow - Un modello di branching che funzionaGit Flow - Un modello di branching che funziona
Git Flow - Un modello di branching che funziona
 
introduzione a symfony 2
introduzione a symfony 2 introduzione a symfony 2
introduzione a symfony 2
 
Docker & DevOps
Docker  & DevOpsDocker  & DevOps
Docker & DevOps
 
Vagrant e Docker a confronto;scegliere ed iniziare
Vagrant e  Docker a confronto;scegliere ed iniziareVagrant e  Docker a confronto;scegliere ed iniziare
Vagrant e Docker a confronto;scegliere ed iniziare
 
Introduzione a Docker (parte 2 - Pratica)
Introduzione a Docker (parte 2 - Pratica)Introduzione a Docker (parte 2 - Pratica)
Introduzione a Docker (parte 2 - Pratica)
 
Corso Python Deltapromo - Lezione 3
Corso Python Deltapromo - Lezione 3Corso Python Deltapromo - Lezione 3
Corso Python Deltapromo - Lezione 3
 
Systemd - Firenze LUG
Systemd - Firenze LUGSystemd - Firenze LUG
Systemd - Firenze LUG
 
Livin' with Docker - dallo sviluppo alla produzione
Livin' with Docker - dallo sviluppo alla produzioneLivin' with Docker - dallo sviluppo alla produzione
Livin' with Docker - dallo sviluppo alla produzione
 
Streaming in Java e Flex con Red5
Streaming in Java e Flex con Red5Streaming in Java e Flex con Red5
Streaming in Java e Flex con Red5
 
Linux Capabilities - ita - v2.1.5 - compatta
Linux Capabilities - ita - v2.1.5 - compattaLinux Capabilities - ita - v2.1.5 - compatta
Linux Capabilities - ita - v2.1.5 - compatta
 
Systemd - Como Lug
Systemd - Como LugSystemd - Como Lug
Systemd - Como Lug
 
Introduzione a Docker (Maggio 2017) [ITA]
Introduzione a Docker (Maggio 2017) [ITA]Introduzione a Docker (Maggio 2017) [ITA]
Introduzione a Docker (Maggio 2017) [ITA]
 
Google cloud: Big Data + docker = kubernetes
Google cloud: Big Data + docker = kubernetesGoogle cloud: Big Data + docker = kubernetes
Google cloud: Big Data + docker = kubernetes
 

Destaque

Sys05 uso consapevole di git - beyond the basic
Sys05   uso consapevole di git - beyond the basicSys05   uso consapevole di git - beyond the basic
Sys05 uso consapevole di git - beyond the basic
DotNetCampus
 
Openwrt, linux e GPIO al LinuxDay 2010 Roma
Openwrt, linux e GPIO al LinuxDay 2010 RomaOpenwrt, linux e GPIO al LinuxDay 2010 Roma
Openwrt, linux e GPIO al LinuxDay 2010 Roma
Claudio Mignanti
 
AFP, Poliovirus, Enteroviruses,
AFP, Poliovirus, Enteroviruses, AFP, Poliovirus, Enteroviruses,
AFP, Poliovirus, Enteroviruses,
Fibamicro1
 
Help and hoarding
Help and hoardingHelp and hoarding
Help and hoarding
scott4hlp
 
Session plan retail management
Session plan retail managementSession plan retail management
Session plan retail management
rk2its
 
Picobgp - A simple deamon for routing advertising
Picobgp - A simple deamon for routing advertisingPicobgp - A simple deamon for routing advertising
Picobgp - A simple deamon for routing advertising
Claudio Mignanti
 

Destaque (20)

Sys05 uso consapevole di git - beyond the basic
Sys05   uso consapevole di git - beyond the basicSys05   uso consapevole di git - beyond the basic
Sys05 uso consapevole di git - beyond the basic
 
GITT (part 1 of 2)
GITT (part 1 of 2)GITT (part 1 of 2)
GITT (part 1 of 2)
 
Git–SVN
Git–SVNGit–SVN
Git–SVN
 
Linux Day 2015 Genova
Linux Day 2015 GenovaLinux Day 2015 Genova
Linux Day 2015 Genova
 
Introduzione a git
Introduzione a gitIntroduzione a git
Introduzione a git
 
Mini git tutorial
Mini git tutorialMini git tutorial
Mini git tutorial
 
Git - An Introduction
Git - An IntroductionGit - An Introduction
Git - An Introduction
 
Your face _farsi_
Your face _farsi_Your face _farsi_
Your face _farsi_
 
Openwrt, linux e GPIO al LinuxDay 2010 Roma
Openwrt, linux e GPIO al LinuxDay 2010 RomaOpenwrt, linux e GPIO al LinuxDay 2010 Roma
Openwrt, linux e GPIO al LinuxDay 2010 Roma
 
AFP, Poliovirus, Enteroviruses,
AFP, Poliovirus, Enteroviruses, AFP, Poliovirus, Enteroviruses,
AFP, Poliovirus, Enteroviruses,
 
311
311311
311
 
Help and hoarding
Help and hoardingHelp and hoarding
Help and hoarding
 
Session plan retail management
Session plan retail managementSession plan retail management
Session plan retail management
 
(1) siyasal tarih 1923-50
(1) siyasal tarih 1923-50(1) siyasal tarih 1923-50
(1) siyasal tarih 1923-50
 
Computers
ComputersComputers
Computers
 
Jacques louis david2003
Jacques louis david2003Jacques louis david2003
Jacques louis david2003
 
Picobgp - A simple deamon for routing advertising
Picobgp - A simple deamon for routing advertisingPicobgp - A simple deamon for routing advertising
Picobgp - A simple deamon for routing advertising
 
Virus y vacunas expo.claudia parra
Virus y vacunas expo.claudia parraVirus y vacunas expo.claudia parra
Virus y vacunas expo.claudia parra
 
Grunt.js introduction
Grunt.js introductionGrunt.js introduction
Grunt.js introduction
 
Slideshare
SlideshareSlideshare
Slideshare
 

Semelhante a Git for dummies

Introduzione a git
Introduzione a gitIntroduzione a git
Introduzione a git
rpanfili
 

Semelhante a Git for dummies (14)

Introduzione a git
Introduzione a gitIntroduzione a git
Introduzione a git
 
Gitt (part 2 of 2)
Gitt (part 2 of 2)Gitt (part 2 of 2)
Gitt (part 2 of 2)
 
Con Aruba, a lezione di Cloud #lezione 30 - parte 2: 'GitLab e Cloud Server ...
Con Aruba, a lezione di Cloud  #lezione 30 - parte 2: 'GitLab e Cloud Server ...Con Aruba, a lezione di Cloud  #lezione 30 - parte 2: 'GitLab e Cloud Server ...
Con Aruba, a lezione di Cloud #lezione 30 - parte 2: 'GitLab e Cloud Server ...
 
Git gestione comoda del repository
Git   gestione comoda del repositoryGit   gestione comoda del repository
Git gestione comoda del repository
 
Git: un'introduzione pratica
Git: un'introduzione praticaGit: un'introduzione pratica
Git: un'introduzione pratica
 
Introduzione a git
Introduzione a gitIntroduzione a git
Introduzione a git
 
Chi ha paura di Github? Conosciamolo meglio!
Chi ha paura di Github? Conosciamolo meglio!Chi ha paura di Github? Conosciamolo meglio!
Chi ha paura di Github? Conosciamolo meglio!
 
Git
GitGit
Git
 
Con Aruba, a lezione di cloud #lezione 30 - parte 1: 'GitLab e Cloud Server ...
Con Aruba, a lezione di cloud  #lezione 30 - parte 1: 'GitLab e Cloud Server ...Con Aruba, a lezione di cloud  #lezione 30 - parte 1: 'GitLab e Cloud Server ...
Con Aruba, a lezione di cloud #lezione 30 - parte 1: 'GitLab e Cloud Server ...
 
Introduzione a Git e GitLab
Introduzione a Git e GitLabIntroduzione a Git e GitLab
Introduzione a Git e GitLab
 
NuIEEE - Workshop de Git
NuIEEE - Workshop de GitNuIEEE - Workshop de Git
NuIEEE - Workshop de Git
 
Deploy Heroku-style di un child theme WordPress su VPS via GIT
Deploy Heroku-style di un child theme WordPress su VPS via GITDeploy Heroku-style di un child theme WordPress su VPS via GIT
Deploy Heroku-style di un child theme WordPress su VPS via GIT
 
Sviluppare un plugin WordPress da zero - WordCamp Bologna 2018
Sviluppare un plugin WordPress da zero - WordCamp Bologna 2018Sviluppare un plugin WordPress da zero - WordCamp Bologna 2018
Sviluppare un plugin WordPress da zero - WordCamp Bologna 2018
 
Xamarin DevOps
Xamarin DevOpsXamarin DevOps
Xamarin DevOps
 

Git for dummies

  • 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
  • 3. 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
  • 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
  • 6. 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
  • 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
  • 19. EOF ? Copyright CC-BY-SA Claudio Mignanti <c.mignanti gmail.com>