SlideShare una empresa de Scribd logo
1 de 30
Git (/ɡɪt/)

    Cos'è?

    E' un sistema di controllo di versione distribuito

    Sviluppato e rilasciato nel 2005 da Torvalds

    Ora utilizzato per organizzare e mantenere grandi
    progetti di sviluppo
Perché “distribuito”?

    Ogni sviluppatore ha a disposizione una copia
    locale dell'intera cronologia di sviluppo


    Decentralizzato
    Non c'è bisogno della “connessione” al server
    Ognuno è di per sé un server!
sh*t happens!




...

    E adesso?




        subversion   git

    Forte supporto allo sviluppo NON lineare

    Diramazioni (branches) e fusioni (merge
    + rebase!) estremamente flessibili e
    potenti permettono di manipolare in
    maniera facile cronologia di sviluppo

    Facile organizzare il lavoro degli altri
    (revisione del codice, collaborazione,
    etc) e il proprio grazie alla copia locale di
    tutto

  Ma è veloce??
              ASSOLUTAMENTE SI :)
Scalabile e veloce specie su grandi progetti
(es. cronologia sviluppo locale!)




            …vediamolo in pratica

  Ma è veloce??
              ASSOLUTAMENTE SI :)
Scalabile e veloce specie su grandi progetti
(es. cronologia sviluppo locale!)




            …vediamolo in pratica
git config --global user.name “Rubens Panfili”
git config --global user.email “rubens.panfili@gmail.com”


#git config --global color.status auto
#git config --global color.interactive true
#git config --global color.branch auto
#git config --global color.diff auto


git config --global color.ui true


git config --global core.editor vim
git config --global merge.tool vimdiff
#git config --global merge.tool meld


cat ~/.gitconfig
Init e
                                 commit



mkdir test_project
cd test_project
git init


echo “This is a file” > file_A
git status
git add file_A
git status
git commit -m “Initial commit”
git status
git log
Reset e
                                                    checkout



echo “This is just another file” > file_B
cp file_B file_C
git status
git add .
git status
git reset HEAD file_C
git commit -m “added file_B”
vim file_A
git status
git checkout -- file_A
git status && cat file_A
git add . && git commit -m “added nothing useful”
Reset




rm file_B
git status
vim file_A
git add .
git status
git rm file_B
git status
git commit -m “something changed”
ls
git reset --hard HEAD^
ls
Reset



rm file_B
git status
vim file_A
git add .
git status
git rm file_B
git status
git commit -m “something changed”
ls
git reset --hard HEAD^
ls
Remotes



git clone https://github.com/rpanfili/test_project.git
cd test_project
cat .git/config
Branches




git status
git branch new_feature
git branch
git checkout new_feature
git status
vim index.htm
git add . && git commit -m “added link to index”
EMERGENZA!
Branches - merge




git status
git checkout master
git checkout -b hotfix
# equivale a
# git branch hotfix
# git checkout hotfix
vim index.htm
git add . && git commit -m “changed H1”
git log
git checkout master
vim index.htm
git add . && git commit -m “changed title”
git merge hotfix
git log --graph
Push e remote
                                                    branches



git push origin master
git log origin/master

git   branch -a
git   checkout -b feature_x origin/feature_x
git   log
git   show HEAD
git   checkout master
git   merge feature_x
Push e remote
                                                    branches



git push origin master
git log origin/master

git   branch -a
git   checkout -b feature_x origin/feature_x
git   log
git   show HEAD
git   checkout master
git   merge feature_x
Push e remote
                                                    branches



git mergetool
git commit -m “merged with feature_x branch”
gitk
Push e remote
                                                    branches



git mergetool
git commit -m “merged with feature_x branch”
gitk
git checkout new_feature
git log
git rebase master
git log --oneline –graph
git checkout master
git merge new_feature
git branch -d new_feature




      merge                 rebase
Remote branches




git checkout -b feature_foo
git push origin feature_foo

git fetch origin
git branch -a
git checkout -b feature_foo origin/feature_foo

git pull origin feature_foo
Best practice
                                                   gitignore



cd config
cp database.yml database.yml.example
vim database.yml.example
echo “ndatabase.yml” >> .gitignore
git add .gitignore database.yml.example
git commit -m “added database config example”
Best practice
    workflow
Reference





    Pro Git
    http://git-scm.com/book



    Svn2Git
    https://github.com/nirvdrum/svn2git



    git [command] --help
    # or man git [command]
Introduzione a git

Más contenido relacionado

Similar a Introduzione a git

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.Gerardo Di Iorio
 
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 funzionaInnoteam Srl
 
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!Giacoma Allegretta
 
Git gestione comoda del repository
Git   gestione comoda del repositoryGit   gestione comoda del repository
Git gestione comoda del repositoryRoberto Polli
 
Git: un'introduzione pratica
Git: un'introduzione praticaGit: un'introduzione pratica
Git: un'introduzione praticaBabel
 
NuIEEE - Workshop de Git
NuIEEE - Workshop de GitNuIEEE - Workshop de Git
NuIEEE - Workshop de GitZé Bateira
 
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 ...Aruba S.p.A.
 
Git
GitGit
Gitmods
 
High Performance Web Apps con PHP e Symfony 2
High Performance Web Apps con PHP  e Symfony 2High Performance Web Apps con PHP  e Symfony 2
High Performance Web Apps con PHP e Symfony 2Giorgio Cefaro
 
Introduzione a GIT - Laboratorio di Web Design 2014/15
Introduzione a GIT - Laboratorio di Web Design 2014/15Introduzione a GIT - Laboratorio di Web Design 2014/15
Introduzione a GIT - Laboratorio di Web Design 2014/15Giovanni Buffa
 
Introduzione a Git e GitLab
Introduzione a Git e GitLabIntroduzione a Git e GitLab
Introduzione a Git e GitLabYefry Figueroa
 
Plone scalable dal sito del piccolo Comune, al portale e intranet della Regio...
Plone scalable dal sito del piccolo Comune, al portale e intranet della Regio...Plone scalable dal sito del piccolo Comune, al portale e intranet della Regio...
Plone scalable dal sito del piccolo Comune, al portale e intranet della Regio...Stefano Marchetti
 
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 2018Marco Chiesi
 

Similar a Introduzione a git (20)

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.
 
Git e GitHub
Git e GitHubGit e GitHub
Git e GitHub
 
GITT (part 1 of 2)
GITT (part 1 of 2)GITT (part 1 of 2)
GITT (part 1 of 2)
 
Git for dummies
Git for dummiesGit for dummies
Git for dummies
 
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
 
Git
GitGit
Git
 
Emerasoft Git quickstart
Emerasoft Git quickstartEmerasoft Git quickstart
Emerasoft Git quickstart
 
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 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
 
NuIEEE - Workshop de Git
NuIEEE - Workshop de GitNuIEEE - Workshop de Git
NuIEEE - Workshop de Git
 
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
GitGit
Git
 
High Performance Web Apps con PHP e Symfony 2
High Performance Web Apps con PHP  e Symfony 2High Performance Web Apps con PHP  e Symfony 2
High Performance Web Apps con PHP e Symfony 2
 
Standard Dev Workflow
Standard Dev WorkflowStandard Dev Workflow
Standard Dev Workflow
 
Introduzione a GIT - Laboratorio di Web Design 2014/15
Introduzione a GIT - Laboratorio di Web Design 2014/15Introduzione a GIT - Laboratorio di Web Design 2014/15
Introduzione a GIT - Laboratorio di Web Design 2014/15
 
Introduzione a Git e GitLab
Introduzione a Git e GitLabIntroduzione a Git e GitLab
Introduzione a Git e GitLab
 
Plone scalable dal sito del piccolo Comune, al portale e intranet della Regio...
Plone scalable dal sito del piccolo Comune, al portale e intranet della Regio...Plone scalable dal sito del piccolo Comune, al portale e intranet della Regio...
Plone scalable dal sito del piccolo Comune, al portale e intranet della Regio...
 
Xamarin DevOps
Xamarin DevOpsXamarin DevOps
Xamarin DevOps
 
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
 

Introduzione a git

  • 1.
  • 2. Git (/ɡɪt/)  Cos'è?  E' un sistema di controllo di versione distribuito  Sviluppato e rilasciato nel 2005 da Torvalds  Ora utilizzato per organizzare e mantenere grandi progetti di sviluppo
  • 3. Perché “distribuito”?  Ogni sviluppatore ha a disposizione una copia locale dell'intera cronologia di sviluppo  Decentralizzato Non c'è bisogno della “connessione” al server Ognuno è di per sé un server!
  • 5.
  • 6. E adesso? subversion git
  • 7. Forte supporto allo sviluppo NON lineare  Diramazioni (branches) e fusioni (merge + rebase!) estremamente flessibili e potenti permettono di manipolare in maniera facile cronologia di sviluppo  Facile organizzare il lavoro degli altri (revisione del codice, collaborazione, etc) e il proprio grazie alla copia locale di tutto
  • 8.  Ma è veloce?? ASSOLUTAMENTE SI :) Scalabile e veloce specie su grandi progetti (es. cronologia sviluppo locale!) …vediamolo in pratica
  • 9.  Ma è veloce?? ASSOLUTAMENTE SI :) Scalabile e veloce specie su grandi progetti (es. cronologia sviluppo locale!) …vediamolo in pratica
  • 10.
  • 11. git config --global user.name “Rubens Panfili” git config --global user.email “rubens.panfili@gmail.com” #git config --global color.status auto #git config --global color.interactive true #git config --global color.branch auto #git config --global color.diff auto git config --global color.ui true git config --global core.editor vim git config --global merge.tool vimdiff #git config --global merge.tool meld cat ~/.gitconfig
  • 12. Init e commit mkdir test_project cd test_project git init echo “This is a file” > file_A git status git add file_A git status git commit -m “Initial commit” git status git log
  • 13.
  • 14. Reset e checkout echo “This is just another file” > file_B cp file_B file_C git status git add . git status git reset HEAD file_C git commit -m “added file_B” vim file_A git status git checkout -- file_A git status && cat file_A git add . && git commit -m “added nothing useful”
  • 15. Reset rm file_B git status vim file_A git add . git status git rm file_B git status git commit -m “something changed” ls git reset --hard HEAD^ ls
  • 16. Reset rm file_B git status vim file_A git add . git status git rm file_B git status git commit -m “something changed” ls git reset --hard HEAD^ ls
  • 18. Branches git status git branch new_feature git branch git checkout new_feature git status vim index.htm git add . && git commit -m “added link to index”
  • 20. Branches - merge git status git checkout master git checkout -b hotfix # equivale a # git branch hotfix # git checkout hotfix vim index.htm git add . && git commit -m “changed H1” git log git checkout master vim index.htm git add . && git commit -m “changed title” git merge hotfix git log --graph
  • 21. Push e remote branches git push origin master git log origin/master git branch -a git checkout -b feature_x origin/feature_x git log git show HEAD git checkout master git merge feature_x
  • 22. Push e remote branches git push origin master git log origin/master git branch -a git checkout -b feature_x origin/feature_x git log git show HEAD git checkout master git merge feature_x
  • 23. Push e remote branches git mergetool git commit -m “merged with feature_x branch” gitk
  • 24. Push e remote branches git mergetool git commit -m “merged with feature_x branch” gitk
  • 25. git checkout new_feature git log git rebase master git log --oneline –graph git checkout master git merge new_feature git branch -d new_feature merge rebase
  • 26. Remote branches git checkout -b feature_foo git push origin feature_foo git fetch origin git branch -a git checkout -b feature_foo origin/feature_foo git pull origin feature_foo
  • 27. Best practice gitignore cd config cp database.yml database.yml.example vim database.yml.example echo “ndatabase.yml” >> .gitignore git add .gitignore database.yml.example git commit -m “added database config example”
  • 28. Best practice workflow
  • 29. Reference  Pro Git http://git-scm.com/book  Svn2Git https://github.com/nirvdrum/svn2git  git [command] --help # or man git [command]