git



                                    1
quinta-feira, 19 de maio de 2011
git is...

                        “Git is a free & open source,
                        distributed version control system
                        designed to handle everything from small to
                        very large projects with speed and efficiency.”




                                             2
quinta-feira, 19 de maio de 2011
quem usa?



                                       3
quinta-feira, 19 de maio de 2011
fedora
                                   debian                     gnome


                      perl             linux kernel                 RoR


                android                     Itautec   (new)
                                                                      Qt

                              facebook                        VLC
                                             INdT
                                               4
quinta-feira, 19 de maio de 2011
linux kernel
                                     alguns números...




                                             5
quinta-feira, 19 de maio de 2011
6
quinta-feira, 19 de maio de 2011
7
quinta-feira, 19 de maio de 2011
8
quinta-feira, 19 de maio de 2011
9
quinta-feira, 19 de maio de 2011
características



quinta-feira, 19 de maio de 2011
rápido




                                     11
quinta-feira, 19 de maio de 2011
simples




                                      12
quinta-feira, 19 de maio de 2011
escalável




                                       13
quinta-feira, 19 de maio de 2011
distribuído




                                        14
quinta-feira, 19 de maio de 2011
local
                                   centralizado
                                    distribuído

                                        15
quinta-feira, 19 de maio de 2011
local




                                     16
quinta-feira, 19 de maio de 2011
centralizado




                                        17
quinta-feira, 19 de maio de 2011
distribuído




                                        18
quinta-feira, 19 de maio de 2011
git 101



quinta-feira, 19 de maio de 2011
instalação
                     # a partir de agora é no terminal do linux!

                     # baixar e executar o script de instalação local
                     $ wget http://www.cin.ufpe.br/~astm/git/git.sh

                     # ubuntu
                     $ sudo apt-get install git-core
                     # fedora
                     $ su; yum install git


quinta-feira, 19 de maio de 2011
git init
                                   cria um repositório ou reinicia um existente




quinta-feira, 19 de maio de 2011
git init - exemplo
                                     # cria pasta do projeto
                                     $ mkdir ~/ldc-automacao

                                     # muda para essa pasta
                                     $ cd ~/ldc-automacao

                                     # inicia o repositório
                                     $ git init


quinta-feira, 19 de maio de 2011
git status
                                   mostra o status da pasta de trabalho




quinta-feira, 19 de maio de 2011
quinta-feira, 19 de maio de 2011
git add
                                   adiciona arquivos ao index




quinta-feira, 19 de maio de 2011
git add - exemplo #1

                                   # cria arquivo README
                                   $ touch README
                                   # o adiciona ao index
                                   $ git add README




quinta-feira, 19 de maio de 2011
git add - exemplo #2
                                   # baixa o código do LDC 1.0
                                   $ wget adrianomelo.com/ldc.tar
                                   # extrai os arquivos
                                   $ tar -xf ldc.tar

                                   $ git init
                                   $ git add .



quinta-feira, 19 de maio de 2011
git rm
                       remove o arquivo da árvore de trabalho e do index




quinta-feira, 19 de maio de 2011
git commit
                                   grava as mudanças no repositório




quinta-feira, 19 de maio de 2011
git commit - exemplo

                            # faz o commit das últimas alterações
                            $ git commit -m ‘ldc importado’

                            # faz o commit sem precisar do “git add”
                            $ git commit -am ‘ldc importado’




quinta-feira, 19 de maio de 2011
git log
                                   mostra o log dos commits




quinta-feira, 19 de maio de 2011
git log - exemplos

           # arquivos criados, renomeados, mudanças..
           $ git log --summary --oneline

           # mostra os commts e a árvore de merges
           $ git log --oneline --graph --color




quinta-feira, 19 de maio de 2011
git config
                         modifica as configurações do repositório e globais




quinta-feira, 19 de maio de 2011
git config - exemplo
              $ git config --list

              $ git config --global user.name “Adriano Melo”
              $ git config --global user.email 
              “astm@itautec.cin.ufpe.br”




quinta-feira, 19 de maio de 2011
git commit - correção


                            # corrige informações do último commit
                                      $ git commit --amend




quinta-feira, 19 de maio de 2011
git init
                                      git add
                                   git commit
                                    git status
                                      git log
                                    git config




quinta-feira, 19 de maio de 2011
branches
                                   desenvolvimento em paralelo




quinta-feira, 19 de maio de 2011
ao dar commit...
quinta-feira, 19 de maio de 2011
depois de alguns commits..
quinta-feira, 19 de maio de 2011
branch == ponteiro
quinta-feira, 19 de maio de 2011
novo branch (testing)
quinta-feira, 19 de maio de 2011
master em uso (HEAD)
quinta-feira, 19 de maio de 2011
testing em uso (HEAD)
quinta-feira, 19 de maio de 2011
commit em testing
quinta-feira, 19 de maio de 2011
usando master novamente...
quinta-feira, 19 de maio de 2011
commit em master
quinta-feira, 19 de maio de 2011
um branch em git é um arquivo
                                     que contém 40 caracteres.

                     (SHA-1 checksum do commit que ele aponta)




quinta-feira, 19 de maio de 2011
quinta-feira, 19 de maio de 2011
git branch
                                   cria, lista e deleta branches




quinta-feira, 19 de maio de 2011
git branch - exemplos

                              $ git branch # listar branches
                              $ git branch dev # criar branch
                              $ git branch -m dev stable # renomear
                              $ git branch -d stable # remover




quinta-feira, 19 de maio de 2011
git checkout
                                   muda para o branch especificado




quinta-feira, 19 de maio de 2011
git checkout - exemplo

                                   # cria branch ‘experimental’
                                   $ git branch experimental

                                   # muda para o branch
                                   $ git checkout experimental




quinta-feira, 19 de maio de 2011
git checkout - exemplo #2
                          # mostra os últimos commits
                          $ git log --oneline
                          a5eddf9 correcao na gramatica da divisao,
                          ad50ebf seg fault removido
                          dbb2342 doc changes

                          # vai para o commit dbb2342
                          $ git checkout dbb2342


quinta-feira, 19 de maio de 2011
git merge
                                   junta dois branches




quinta-feira, 19 de maio de 2011
git merge - exemplo
                           $ git checkout -b documentacao

                           $ touch INSTALL
                           $ git add INSTALL
                           $ git commit -m ‘arquivo INSTALL criado’

                           $ git checkout master
                           $ git merge documentacao



quinta-feira, 19 de maio de 2011
git rebase
                     integrar mudanças de uma branch à ultima versão de
                                           outra




quinta-feira, 19 de maio de 2011
quinta-feira, 19 de maio de 2011
git rebase - exemplo

                            $ git checkout issue32

                            # adiciona as mudancas do branch
                            issue32 ao branch master
                            $ git rebase master




quinta-feira, 19 de maio de 2011
git branch
                                   git checkout
                                     git merge
                                    git rebase




quinta-feira, 19 de maio de 2011
remote
                                   trabalhando de forma colaborativa




quinta-feira, 19 de maio de 2011
tarefinha:

                                   1. criar conta no github.com

                                     2. dar fork no repositório:
                             github.com/adrianomelo/c-compiler-in-c/




quinta-feira, 19 de maio de 2011
git clone
                                   “clona” um repositório




quinta-feira, 19 de maio de 2011
git clone - exemplo

                    # indo para a pasta do usuário
                    $ cd ~
                    # clonando o repositório
                    $ git clone https://astm@github.com/astm/c-compiler-in-c.git
                    # indo para a pasta do projeto
                    $ cd c-compiler-in-c



quinta-feira, 19 de maio de 2011
git push
                      atualiza repositório remoto com as mudanças locais




quinta-feira, 19 de maio de 2011
git push - exemplo #1

                      # forçando uma modificação
                      $ echo “Testando repositorio” >> README
                      $ git commit -am ‘teste de mudanca’

                      # escrevendo as mudanças no repositório
                      $ git push origin master



quinta-feira, 19 de maio de 2011
git push - exemplo #2
                            # deletando a branch remota issue30
                            $ git push origin :issue30

                            # associar um branch local a um remoto
                            $ git checkout -b issue32tryfix
                            $ git checkout --track origin/issue32
                            $ git push origin issue32



quinta-feira, 19 de maio de 2011
git fetch
                                   atualiza o branch remoto especificado




quinta-feira, 19 de maio de 2011
git fetch - exemplo #1

                   # clonando o repositório c-compiler-in-c
                   $ git clone https://astm@github.com/astm/c-compiler-in-c.git
                   # atualizando o branch origin/master
                   $ git fetch origin
                   # merge o origin/master com o master
                   $ git merge origin/master



quinta-feira, 19 de maio de 2011
git fetch - exemplo #2
                 # $P = prefixo, $L = repositório
                 $ P=git://git.kernel.org/pub/scm/
                 $ L=linux/kernel/git/stable/linux-2.6.35.y.git
                 # clonando o repositório 2.6.35 do kernel
                 $ git clone $P$L
                 # depois de algumas horas.....
                 $ git fetch origin master
                 # mudanças realizadas, comparando com HEAD
                 $ git diff FETCH_HEAD..HEAD
                 # diferença dos dois últimos commits..
                 $ git diff FETCH_HEAD..FETCH_HEADˆ
quinta-feira, 19 de maio de 2011
outros comandos..



quinta-feira, 19 de maio de 2011
git bisect
                  faz uma busca binária para achar o commit que um bug
                                foi introduzido (regressão)




quinta-feira, 19 de maio de 2011
git bisect - exemplo
                   $ git bisect start
                   $ git bisect bad
                   $ git bisect good v2.6.13-rc2
                   Bisecting: 675 revisions left to test after this

                   $ git bisect good
                   Bisecting: 337 revisions left to test after this

                   $ git bisect reset


quinta-feira, 19 de maio de 2011
git reset
                                   limpa o HEAD para o estado especificado




quinta-feira, 19 de maio de 2011
git reset - exemplo

                                        $ touch gui.java
                                        $ git add gui.java

                                        $ git reset




quinta-feira, 19 de maio de 2011
site:
                              cinlug-br.org
                           twitter:
                              twitter.com/cinlug
                           lista:
                              http://groups.google.com/group/cinlug/

quinta-feira, 19 de maio de 2011

git 101

  • 1.
    git 1 quinta-feira, 19 de maio de 2011
  • 2.
    git is... “Git is a free & open source, distributed version control system designed to handle everything from small to very large projects with speed and efficiency.” 2 quinta-feira, 19 de maio de 2011
  • 3.
    quem usa? 3 quinta-feira, 19 de maio de 2011
  • 4.
    fedora debian gnome perl linux kernel RoR android Itautec (new) Qt facebook VLC INdT 4 quinta-feira, 19 de maio de 2011
  • 5.
    linux kernel alguns números... 5 quinta-feira, 19 de maio de 2011
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
    rápido 11 quinta-feira, 19 de maio de 2011
  • 12.
    simples 12 quinta-feira, 19 de maio de 2011
  • 13.
    escalável 13 quinta-feira, 19 de maio de 2011
  • 14.
    distribuído 14 quinta-feira, 19 de maio de 2011
  • 15.
    local centralizado distribuído 15 quinta-feira, 19 de maio de 2011
  • 16.
    local 16 quinta-feira, 19 de maio de 2011
  • 17.
    centralizado 17 quinta-feira, 19 de maio de 2011
  • 18.
    distribuído 18 quinta-feira, 19 de maio de 2011
  • 19.
    git 101 quinta-feira, 19de maio de 2011
  • 20.
    instalação # a partir de agora é no terminal do linux! # baixar e executar o script de instalação local $ wget http://www.cin.ufpe.br/~astm/git/git.sh # ubuntu $ sudo apt-get install git-core # fedora $ su; yum install git quinta-feira, 19 de maio de 2011
  • 21.
    git init cria um repositório ou reinicia um existente quinta-feira, 19 de maio de 2011
  • 22.
    git init -exemplo # cria pasta do projeto $ mkdir ~/ldc-automacao # muda para essa pasta $ cd ~/ldc-automacao # inicia o repositório $ git init quinta-feira, 19 de maio de 2011
  • 23.
    git status mostra o status da pasta de trabalho quinta-feira, 19 de maio de 2011
  • 24.
    quinta-feira, 19 demaio de 2011
  • 25.
    git add adiciona arquivos ao index quinta-feira, 19 de maio de 2011
  • 26.
    git add -exemplo #1 # cria arquivo README $ touch README # o adiciona ao index $ git add README quinta-feira, 19 de maio de 2011
  • 27.
    git add -exemplo #2 # baixa o código do LDC 1.0 $ wget adrianomelo.com/ldc.tar # extrai os arquivos $ tar -xf ldc.tar $ git init $ git add . quinta-feira, 19 de maio de 2011
  • 28.
    git rm remove o arquivo da árvore de trabalho e do index quinta-feira, 19 de maio de 2011
  • 29.
    git commit grava as mudanças no repositório quinta-feira, 19 de maio de 2011
  • 30.
    git commit -exemplo # faz o commit das últimas alterações $ git commit -m ‘ldc importado’ # faz o commit sem precisar do “git add” $ git commit -am ‘ldc importado’ quinta-feira, 19 de maio de 2011
  • 31.
    git log mostra o log dos commits quinta-feira, 19 de maio de 2011
  • 32.
    git log -exemplos # arquivos criados, renomeados, mudanças.. $ git log --summary --oneline # mostra os commts e a árvore de merges $ git log --oneline --graph --color quinta-feira, 19 de maio de 2011
  • 33.
    git config modifica as configurações do repositório e globais quinta-feira, 19 de maio de 2011
  • 34.
    git config -exemplo $ git config --list $ git config --global user.name “Adriano Melo” $ git config --global user.email “astm@itautec.cin.ufpe.br” quinta-feira, 19 de maio de 2011
  • 35.
    git commit -correção # corrige informações do último commit $ git commit --amend quinta-feira, 19 de maio de 2011
  • 36.
    git init git add git commit git status git log git config quinta-feira, 19 de maio de 2011
  • 37.
    branches desenvolvimento em paralelo quinta-feira, 19 de maio de 2011
  • 38.
  • 39.
    depois de algunscommits.. quinta-feira, 19 de maio de 2011
  • 40.
  • 41.
  • 42.
    master em uso(HEAD) quinta-feira, 19 de maio de 2011
  • 43.
    testing em uso(HEAD) quinta-feira, 19 de maio de 2011
  • 44.
  • 45.
  • 46.
  • 47.
    um branch emgit é um arquivo que contém 40 caracteres. (SHA-1 checksum do commit que ele aponta) quinta-feira, 19 de maio de 2011
  • 48.
    quinta-feira, 19 demaio de 2011
  • 49.
    git branch cria, lista e deleta branches quinta-feira, 19 de maio de 2011
  • 50.
    git branch -exemplos $ git branch # listar branches $ git branch dev # criar branch $ git branch -m dev stable # renomear $ git branch -d stable # remover quinta-feira, 19 de maio de 2011
  • 51.
    git checkout muda para o branch especificado quinta-feira, 19 de maio de 2011
  • 52.
    git checkout -exemplo # cria branch ‘experimental’ $ git branch experimental # muda para o branch $ git checkout experimental quinta-feira, 19 de maio de 2011
  • 53.
    git checkout -exemplo #2 # mostra os últimos commits $ git log --oneline a5eddf9 correcao na gramatica da divisao, ad50ebf seg fault removido dbb2342 doc changes # vai para o commit dbb2342 $ git checkout dbb2342 quinta-feira, 19 de maio de 2011
  • 54.
    git merge junta dois branches quinta-feira, 19 de maio de 2011
  • 55.
    git merge -exemplo $ git checkout -b documentacao $ touch INSTALL $ git add INSTALL $ git commit -m ‘arquivo INSTALL criado’ $ git checkout master $ git merge documentacao quinta-feira, 19 de maio de 2011
  • 56.
    git rebase integrar mudanças de uma branch à ultima versão de outra quinta-feira, 19 de maio de 2011
  • 57.
    quinta-feira, 19 demaio de 2011
  • 58.
    git rebase -exemplo $ git checkout issue32 # adiciona as mudancas do branch issue32 ao branch master $ git rebase master quinta-feira, 19 de maio de 2011
  • 59.
    git branch git checkout git merge git rebase quinta-feira, 19 de maio de 2011
  • 60.
    remote trabalhando de forma colaborativa quinta-feira, 19 de maio de 2011
  • 61.
    tarefinha: 1. criar conta no github.com 2. dar fork no repositório: github.com/adrianomelo/c-compiler-in-c/ quinta-feira, 19 de maio de 2011
  • 62.
    git clone “clona” um repositório quinta-feira, 19 de maio de 2011
  • 63.
    git clone -exemplo # indo para a pasta do usuário $ cd ~ # clonando o repositório $ git clone https://astm@github.com/astm/c-compiler-in-c.git # indo para a pasta do projeto $ cd c-compiler-in-c quinta-feira, 19 de maio de 2011
  • 64.
    git push atualiza repositório remoto com as mudanças locais quinta-feira, 19 de maio de 2011
  • 65.
    git push -exemplo #1 # forçando uma modificação $ echo “Testando repositorio” >> README $ git commit -am ‘teste de mudanca’ # escrevendo as mudanças no repositório $ git push origin master quinta-feira, 19 de maio de 2011
  • 66.
    git push -exemplo #2 # deletando a branch remota issue30 $ git push origin :issue30 # associar um branch local a um remoto $ git checkout -b issue32tryfix $ git checkout --track origin/issue32 $ git push origin issue32 quinta-feira, 19 de maio de 2011
  • 67.
    git fetch atualiza o branch remoto especificado quinta-feira, 19 de maio de 2011
  • 68.
    git fetch -exemplo #1 # clonando o repositório c-compiler-in-c $ git clone https://astm@github.com/astm/c-compiler-in-c.git # atualizando o branch origin/master $ git fetch origin # merge o origin/master com o master $ git merge origin/master quinta-feira, 19 de maio de 2011
  • 69.
    git fetch -exemplo #2 # $P = prefixo, $L = repositório $ P=git://git.kernel.org/pub/scm/ $ L=linux/kernel/git/stable/linux-2.6.35.y.git # clonando o repositório 2.6.35 do kernel $ git clone $P$L # depois de algumas horas..... $ git fetch origin master # mudanças realizadas, comparando com HEAD $ git diff FETCH_HEAD..HEAD # diferença dos dois últimos commits.. $ git diff FETCH_HEAD..FETCH_HEADˆ quinta-feira, 19 de maio de 2011
  • 70.
  • 71.
    git bisect faz uma busca binária para achar o commit que um bug foi introduzido (regressão) quinta-feira, 19 de maio de 2011
  • 72.
    git bisect -exemplo $ git bisect start $ git bisect bad $ git bisect good v2.6.13-rc2 Bisecting: 675 revisions left to test after this $ git bisect good Bisecting: 337 revisions left to test after this $ git bisect reset quinta-feira, 19 de maio de 2011
  • 73.
    git reset limpa o HEAD para o estado especificado quinta-feira, 19 de maio de 2011
  • 74.
    git reset -exemplo $ touch gui.java $ git add gui.java $ git reset quinta-feira, 19 de maio de 2011
  • 75.
    site: cinlug-br.org twitter: twitter.com/cinlug lista: http://groups.google.com/group/cinlug/ quinta-feira, 19 de maio de 2011