SlideShare ist ein Scribd-Unternehmen logo
1 von 40
Introdução
ao Git
Author: Eduardo R. D’Avila <erdavila@gmail.com>
Date:   Tue Mar 26 19:00:00 2013 -0300
Tópicos

Introdução
Commits
Branches e Tags
Interação entre Repositórios
Comandos e Opções Diversas




2
Por que usar um SCM?

Permite:
•   restaurar versões anteriores
•   juntar alterações feitas concorrentemente
•   identificar o que foi alterado em cada edição
•   identificar qual alteração introduziu um bug
•   identificar quem fez cada alteração e quando
•   marcar versões
•   analisar como o projeto evolui




3
Centralizado x Distribuído

          Centralizado                 Distribuído

    CVS




    Git é Distribuído
    • Todo diretório de trabalho é um repositório completo
        • Contém todo histórico de alterações
    • Principais operações são locais
        • Sem dependência de um servidor
    • Somente operações de “sincronização” necessitam
      acesso a outros repositórios
4
Repositórios

Repositório do desenvolvedor
• Um diretório usado para se trabalhar no projeto
• Contém arquivos do projeto disponíveis para serem editados
• Dados do Git no diretório .git na raiz do projeto


Repositório para ser compartilhado (bare)
• Um diretório usado para compartilhar o projeto
• Sem arquivos do projeto disponíveis para serem editados
• Dados do Git diretamente na raiz do projeto



Criação de repositório:
• git init [--bare] <diretório>




5
Configuração inicial

Configurar nome e e-mail do desenvolvedor:
• git config --global user.name "Nome do Desenvolvedor"
• git config --global user.email username@domínio.com




Recomendado: habilitar cores
• git config --global color.ui true




6
Commits
Commit

Um commit representa um estado do projeto
Contém também autor, data, descrição
Também chamado de “revisão”


Cada commit tem um ancestral
Exceções:
• O primeiro commit do projeto
• Commits resultantes de merge


A cadeia de commits forma o histórico de alterações do projeto

                                         D       E       F
                      A          B   C                       I
                                             G       H




8
Commit

Como fazer um commit
1. Usar o comando git-add para marcar os arquivos a serem incluídos no
   próximo commit:
• git add <arquivo>... <diretório>...     # Inclui arquivos recursivamente
2. Efetuar o commit:
• git commit [-m "descrição"]


Visualizar o histórico de commits
A partir do mais recente           commit 2874505bdb80ee8790296428576d977c28708e7f
• git log [<parâmetros>...]        Author: Eduardo R. D'Avila <erdavila@gmail.com>
                                   Date:   Sat Jul 28 13:48:56 2012 -0300

                                        Force loading order of test scripts
Commits são identificados por hashes SHA1 (40 caracteres)
• Gerados pelo Git
• Só é necessário usar caracteres o suficiente para não ser ambíguo, a partir de 4
  caracteres


9
Commit

Index / Staging Area / Cache
É um estágio pré-commit – representa o estado que se tornará o próximo
commit

     arquivo        git add                      git commit
                                  index                        commit
     alterado



Para identificar arquivos alterados desde o último commit:
git status


Para fazer commit diretamente todos os arquivos alterados:
git commit -a



10
Comando status




                                                     index / staging area / cache




 Arquivos versionados mas não-alterados não aparecem na saída do comando status


11
Comandos Básicos

Marcar o que vai ser incluído no próximo commit (adicionar ao
index)

Arquivos novos ou alterados:
• git add <arquivos>... <diretórios>...

Remover do versionamento e apagar:
• git rm <arquivos>...
• git rm –r <diretórios>... # Remove arquivos recursivamente

Remover do versionamento sem apagar:
• git rm --cached <arquivos>...

Renomear ou mover arquivo:
• git mv <nome antes> <nome depois>...

Verificar o estado
• git status


Efetuar o commit
• git commit


12
Branches
e Tags
Branches

Branches são como “realidades alternativas”

Cada branch tem um nome
Branch master é criado por padrão
• Não tem nada de especial
  – Pode ser renomeado
  – Pode ser removido
  – Pode ser recriado




14
Branches

São implementados como referências a commits

master


     format
                                                                 master
                          master
                          bullets

                                                     master

align
                          clipboard




O nome do branch pode ser usado no lugar do commit em comandos



15
Operações com branches

Criar
• git branch <branch> [<commit>]          # somente cria
• git checkout –b <branch> [<commit>]     # cria e alterna para o branch


Listar
• git branch
O branch atual é marcado com “*”

Alternar
• git checkout <branch>


Merge
• git merge <outro branch>


Excluir
• git branch –d <branch>     # somente se foi “mergeado” no branch atual
• git branch –D <branch>
Remove somente a referência. Os commits continuam no histórico.

16
Merge

Junta ao branch atual as alterações de outro branch

Um novo commit é criado
A não ser que:
• Resulte em um “fast-forward”
• Haja algum conflito!


Facilmente identificável no histórico                    HEAD

     $ git checkout master
                                                         master
     $ git merge new-feature
                                         D       E       F
                         A       B   C                            I
                                             G       H


                                                 new-feature


17
Fast-forward

Simplesmente avança o branch atual para alcançar o outro
branch



     $ git checkout master
     $ git merge new-feature           HEAD

                                       master

                               A   B   C

                                              D     E


                                                  new-feature




18
Merge com conflito
                                            // Calculate                              // Calculate
                                            function f(x) {                           function f(x) {
     main.js                                    return x + 2;                         <<<<<<< HEAD
     function f(x) {                        }                                             return x + 2;
         return x;                                                                    =======
     }                                                                merge               return 2 * x;
                                                                                      >>>>>>> other-branch
                                            function f(x) {                           }
                                                return 2 * x;
                                            }




                       $ git merge other-branch
                       Auto-merging main.js
                       CONFLICT (content): Merge conflict in main.js
                       Automatic merge failed; fix conflicts and then commit the result.

                       $ git status
                       # On branch master
                       # Unmerged paths:
                       #   (use "git add/rm <file>..." as appropriate to mark resolution)
                       #
                       #       both modified:      main.js
                       #
                       no changes added to commit (use "git add" and/or "git commit -a")




19
Merge com conflito - resolução

O que fazer?
• Editar arquivos resolvendo os conflitos
• git add <arquivos>     # Marca a resolução dos conflitos
• git commit             # Finaliza o merge


ou cancelar:
• git merge --abort




Ferramentas de merge externas
• Git suporta por padrão: araxis, bc3, diffuse, ecmerge, emerge, gvimdiff, kdiff3, meld,
  opendiff, p4merge, tkdiff, tortoisemerge, vimdiff, xxdiff
• Outras ferramentas podem ser suportadas através de configurações adicionais
• git mergetool [--tool=<ferramenta>] [<arquivo>]




20
HEAD

HEAD é o estado do histórico sobre o qual se está trabalhando
Implementado como referência a um branch (o branch atual) ou diretamente a
um commit


                                                                           HEAD
git checkout <branch>
                                                                           master
• HEAD referencia o branch, que por sua vez referencia o commit
• HEAD é o commit mais recente do branch
                                                            A          B   C
• Ao fazer um commit, o branch avança



                                                                           HEAD
git checkout <commit ou branch remoto ou tag>
•    HEAD referencia diretamente um commit                     A       B   C
•    Repositório fica em “detached HEAD”
•    Ao fazer um commit, HEAD avança
•    Cuidado! Garbage collector pode eliminar commits sem referência


21
Tags

Marcam uma versão do projeto
São implementadas como referências a commits
Não podem ser alteradas
Podem ser assinadas com GPG


Listar
• git tag


Criar
• git tag <nome> [<commit>]




22
Interação entre
Repositórios
Workflows

                 repositório
              compartilhado

                               ditador         repositório
                                               público


     desenvolvedores           tenentes




                                     desenvolvedores



24
Repositórios Remotos
Identificados por uma URL ou caminho:
Sistema de arquivos local:
• /git/projeto.git
• ../outro-projeto
• file:///home/fulano/projeto
SSH (Git deve estar instalado no servidor):
• ssh://usuario@servidor/caminho
• usuario@servidor:caminho
Outros protocolos:
•    git://servidor/caminho – Serviço do Git no servidor
•    http[s]://servidor/caminho
•    ftp[s]://servidor/caminho
•    rsync://servidor/caminho




25
Nomes de Repositórios Remotos
Nomes podem ser usados para referenciar repositórios
remotos
Definir um nome para um repositório remoto em um repositório existente:
• git remote add <nome> <url ou caminho>
Múltiplos repositórios podem ser referenciados – afinal Git é distribuído!

Listar repositórios remotos:
• git remote –v




Clonagem de repositório
• git clone [--bare] <url ou caminho> [<diretório>]
Automaticamente define o nome “origin” para referenciar o repositório clonado




26
Branches Remotos
Cada repositório tem seu conjunto de branches
Branches remotos identificam o estado de um branch em um repositório remoto
Identificados por “<repositório>/<branch>” ou “remotes/<repositório>/<branch>”



                 Repositório X                                Repositório Y
 Usa o nome “origin” para referenciar o repositório Y
                                                         A      B       D   master
                      C     master
                                                                        E   feature
     A      B         D     origin/master

                      E     origin/feature
             F
                  new-feature



Listar branches remotos
• git branch -r      # Lista somente branches remotos
• git branch -a      # Lista branches locais e remotos (o atual é marcado com “*”)

27
Operações com repositórios remotos

Somente duas operações básicas envolvem comunicação com
repositório remoto

git fetch [--tags] <repositório>
• Atualiza branches e tags (e seus commits) do repositório remoto
• Não toca nos branches locais


git push [--tags] <repositório> <branch local>:<branch remoto>
• Atualiza (ou cria) o branch do repositório remoto com o estado do branch local
• Só funciona se for um “fast-forward” (pois não há como fazer um merge remoto)


Extra:
git pull <repositório> <branch remoto>
• Executa um fetch do branch remoto e faz merge com o branch atual




28
Branches “seguidos” (tracked)

Cada branch local pode estar associado a um branch remoto

Criar um branch a partir de um branch remoto faz a associação
automaticamente:
• git branch <novo branch local> <repositório>/<branch remoto>
• git checkout -b <novo branch local> <repositório>/<branch remoto>


Associar branch já existente:                                                  A partir da
• git branch --set-upstream <branch local> <repositório>/<branch remoto>      versão 1.8.0
• git branch --set-upstream-to <repositório>/<branch remoto> <branch local>


Operações simplificadas no branch atual:
• git pull   # Sem mais parâmetros!
• git push   # Sem mais parâmetros!


Listar associações:
• git branch -v -v    # Mesmo parâmetro duas vezes



29
Exemplo

                    Local                                    origin

origin/feature      E     F                          feature   E      F

      A       B                G                 A       B                G
                    C     D                                    C      D
          feature

          HEAD


 $ git      fetch origin
 $ git      checkout -b feature origin/feature
 $ git      add <arquivos> ; git commit
 $ git      push
 ERRO!
 $ git      pull    # fetch + merge
 $ git      push


 30
Comandos
e Opções
Diversas
Comandos

Git tem mais de 130 (!) comandos
Os comandos são classificados como:
• “porcelain” – Comandos de alto nível. Para serem usados por humanos
• “plumbing” – Comandos de baixo nível. Para serem usados por scripts


Em comandos que esperam um commit como parâmetro, pode-se usar
qualquer item que referencie o commit:
•    branch
•    tag
•    HEAD
•    branch remoto



Ajuda
• man git-<comando>
• git help <comando>




32
Comando stash

Guarda temporariamente alterações pendentes
Útil quando se começa uma tarefa e precisa-se alternar para outra tarefa no Git
Funciona como uma pilha:
• stash@{0} (ou simplesmente “stash”) – no topo da pilha. É o default para pop, apply e drop
• stash@{1}
• stash@{2}
• ...


Comandos
• git stash [save ["descrição"]]             # cria novo stash no topo da pilha
• git stash pop [--index] [<stash-id>]       # aplica e remove stash da pilha
• git stash apply [--index] [<stash-id>]     # aplica stash
• git stash list                             # lista todos os stashes
• git stash drop [<stash-id>]                # descarta stash da pilha sem aplicá-lo
• git stash clear                            # descarta todos os stashes
• git show <stash-id>                        # mostra alterações do stash
O parâmetro --index faz restaurar o que estava no index quando o stash foi salvo
A aplicação de um stash em um outro commit é sujeita a conflitos


33
Comando log

Lista commits em ordem inversa (o mais recente primeiro)
Provê muitas opções de visualização do histórico
• git log [<commits ...>] – Histórico a partir dos commits ou branches especificados
• git log [<commit1>]..[<commit2>] – Histórico do que o <commit2> tem de novo em
  relação ao <commit1>
• git log [--follow] -- <arquivo ou diretório> – Lista somente commits que incluem
  alterações no <arquivo ou diretório>. O parâmetro --follow força a identificação de
  renomeação e cópias de arquivo.


Algumas opções:
• -S <string> – Lista somente commits que removeram ou incluíram <string> em algum
  arquivo
• --stat – Inclui lista de arquivos que foram alterados em cada commit e estatísticas
• -p [-C] – Inclui as alterações de cada arquivo (diffs) e, opcionalmente, detecta
  renomeações e cópias
• --oneline – Mostra somente hash e mensagem de cada commit
• --graph – Mostra grafo de branches e merges
• --decorate – Identifica outras referências (branches e tags) no histórico


34
Comandos show / diff / blame

show – Exibe informações de um commit e/ou alterações e
conteúdo de arquivos
• git show [<commit>] – Mostra dados do commit e suas alterações de arquivo
• git show <commit> -- <arquivo> – Mostra alterações feitas no ARQUIVO no commit
  especificado
• git show <commit>:<arquivo> – Mostra conteúdo do ARQUIVO no commit especificado


diff - Mostra diferenças em conteúdos de arquivos
•    git   diff   – Mostra alterações que ainda não estão no index
•    git   diff   --cached – Mostra alterações que estão no index
•    git   diff   <commit> – Mostra diferenças entre o estado atual e o commit
•    git   diff   <commit1> <commit2> – Mostra diferenças entre os commits
•    git   diff   -- <arquivo> – Seleciona arquivo para mostrar diferenças

blame – Exibe informações de quando cada linha de um arquivo
foi alterada e quem fez a alteração
• git blame <arquivo>




35
Comando cherry-pick

Re-aplica alterações de um único commit




     $ git checkout master                                 new-feature

     $ git cherry-pick E
                                                      D     E      F
                                A        B       C
                                                      E’
                                             master

                                             HEAD



Pode ser necessário resolver conflitos



36
Comando revert

Inverte as alterações feitas por um commit



     $ git checkout master
     $ git revert B
                                                     HEAD


                                                     master


                               A         B   C   D       E    B’




Pode ser necessário resolver conflitos



37
Ferramentas gráficas

gitk
Correspondente ao comando git log, mas mais visual e navegável


git gui
Provê funcionalidades de commit, merge, gerência de branches e de
repositórios remotos, entre outras opções




EGit/JGit
Plugin para Eclipse


SourceTree
http://www.sourcetreeapp.com/




39
Perguntas?
Dúvidas?
Sugestões?
Críticas?
Opiniões?
Links

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


Git Cheatsheet (stash x work-dir x index x local x remote)
http://ndpsoftware.com/git-cheatsheet.html


A Visual Git Reference
http://marklodato.github.com/visual-git-guide/index-en.html


git ready
http://gitready.com/




41

Weitere ähnliche Inhalte

Andere mochten auch

Conhecendo o git.
Conhecendo o git.Conhecendo o git.
Conhecendo o git.Rafael Ivan
 
Design Patterns - Conhecendo os padrões de projeto
Design Patterns - Conhecendo os padrões de projetoDesign Patterns - Conhecendo os padrões de projeto
Design Patterns - Conhecendo os padrões de projetoVinicius Quaiato
 
Controlo de Versões Distribuído com Git - C. Augusto Proiete
Controlo de Versões Distribuído com Git - C. Augusto ProieteControlo de Versões Distribuído com Git - C. Augusto Proiete
Controlo de Versões Distribuído com Git - C. Augusto ProieteComunidade NetPonto
 
Desvendando padrões para desenvolvimento web, base para o sucesso
Desvendando padrões para desenvolvimento web, base para o sucessoDesvendando padrões para desenvolvimento web, base para o sucesso
Desvendando padrões para desenvolvimento web, base para o sucessoUbiratan Z. do Nascimento
 
Fluxo de desenvolvimento de software utilizando Git
Fluxo de desenvolvimento de software utilizando GitFluxo de desenvolvimento de software utilizando Git
Fluxo de desenvolvimento de software utilizando GitBruno Ricardo Siqueira
 
Banca: Proposta de Arquitetura de Desenvolvimento Web Baseada em PHP Utilizan...
Banca: Proposta de Arquitetura de Desenvolvimento Web Baseada em PHP Utilizan...Banca: Proposta de Arquitetura de Desenvolvimento Web Baseada em PHP Utilizan...
Banca: Proposta de Arquitetura de Desenvolvimento Web Baseada em PHP Utilizan...Fernando Geraldo Mantoan
 
#1 - Git - Introdução
#1 - Git - Introdução#1 - Git - Introdução
#1 - Git - IntroduçãoRodrigo Branas
 
Node.js - #7 - Core Modules - http - Parte 1 - Rodrigo Branas
Node.js - #7 - Core Modules - http - Parte 1 - Rodrigo BranasNode.js - #7 - Core Modules - http - Parte 1 - Rodrigo Branas
Node.js - #7 - Core Modules - http - Parte 1 - Rodrigo BranasRodrigo Branas
 
Exemplos de Design Patterns em Java
Exemplos de Design Patterns em JavaExemplos de Design Patterns em Java
Exemplos de Design Patterns em Javaalexmacedo
 
Orientação a Objetos com PHP
Orientação a Objetos com PHPOrientação a Objetos com PHP
Orientação a Objetos com PHPAugusto Pascutti
 

Andere mochten auch (17)

Conhecendo o git.
Conhecendo o git.Conhecendo o git.
Conhecendo o git.
 
Design Patterns - Conhecendo os padrões de projeto
Design Patterns - Conhecendo os padrões de projetoDesign Patterns - Conhecendo os padrões de projeto
Design Patterns - Conhecendo os padrões de projeto
 
Design pattern
Design patternDesign pattern
Design pattern
 
Controlo de Versões Distribuído com Git - C. Augusto Proiete
Controlo de Versões Distribuído com Git - C. Augusto ProieteControlo de Versões Distribuído com Git - C. Augusto Proiete
Controlo de Versões Distribuído com Git - C. Augusto Proiete
 
Desvendando padrões para desenvolvimento web, base para o sucesso
Desvendando padrões para desenvolvimento web, base para o sucessoDesvendando padrões para desenvolvimento web, base para o sucesso
Desvendando padrões para desenvolvimento web, base para o sucesso
 
Fluxo de desenvolvimento de software utilizando Git
Fluxo de desenvolvimento de software utilizando GitFluxo de desenvolvimento de software utilizando Git
Fluxo de desenvolvimento de software utilizando Git
 
Design Patterns
Design PatternsDesign Patterns
Design Patterns
 
Banca: Proposta de Arquitetura de Desenvolvimento Web Baseada em PHP Utilizan...
Banca: Proposta de Arquitetura de Desenvolvimento Web Baseada em PHP Utilizan...Banca: Proposta de Arquitetura de Desenvolvimento Web Baseada em PHP Utilizan...
Banca: Proposta de Arquitetura de Desenvolvimento Web Baseada em PHP Utilizan...
 
Design Patterns
Design PatternsDesign Patterns
Design Patterns
 
Git vs. SVN
Git vs. SVNGit vs. SVN
Git vs. SVN
 
#1 - Git - Introdução
#1 - Git - Introdução#1 - Git - Introdução
#1 - Git - Introdução
 
Design Patterns com PHP
Design Patterns com PHPDesign Patterns com PHP
Design Patterns com PHP
 
Padrões de Projeto
Padrões de ProjetoPadrões de Projeto
Padrões de Projeto
 
Webstandards
WebstandardsWebstandards
Webstandards
 
Node.js - #7 - Core Modules - http - Parte 1 - Rodrigo Branas
Node.js - #7 - Core Modules - http - Parte 1 - Rodrigo BranasNode.js - #7 - Core Modules - http - Parte 1 - Rodrigo Branas
Node.js - #7 - Core Modules - http - Parte 1 - Rodrigo Branas
 
Exemplos de Design Patterns em Java
Exemplos de Design Patterns em JavaExemplos de Design Patterns em Java
Exemplos de Design Patterns em Java
 
Orientação a Objetos com PHP
Orientação a Objetos com PHPOrientação a Objetos com PHP
Orientação a Objetos com PHP
 

Ähnlich wie Introdução ao Git

Ähnlich wie Introdução ao Git (20)

Git 101
Git 101Git 101
Git 101
 
GIT - Gerenciamento de Projeto e Versionamento Semântico
GIT - Gerenciamento de Projeto e Versionamento SemânticoGIT - Gerenciamento de Projeto e Versionamento Semântico
GIT - Gerenciamento de Projeto e Versionamento Semântico
 
Git - Fluxo do Versionamento adotado
Git - Fluxo do Versionamento adotadoGit - Fluxo do Versionamento adotado
Git - Fluxo do Versionamento adotado
 
Git para quem vem do SVN
Git para quem vem do SVNGit para quem vem do SVN
Git para quem vem do SVN
 
Git
GitGit
Git
 
Controle de versionamento com Git
Controle de versionamento com GitControle de versionamento com Git
Controle de versionamento com Git
 
Minicurso GIT 2022 - SENAC
Minicurso GIT 2022 - SENACMinicurso GIT 2022 - SENAC
Minicurso GIT 2022 - SENAC
 
Git e github
Git e githubGit e github
Git e github
 
Git
GitGit
Git
 
Gerenciando projetos com Git e GitHub
Gerenciando projetos com Git e GitHubGerenciando projetos com Git e GitHub
Gerenciando projetos com Git e GitHub
 
Minicurso GIT PET Computação
Minicurso GIT PET ComputaçãoMinicurso GIT PET Computação
Minicurso GIT PET Computação
 
Git - Rápido, seguro, eficiente
Git - Rápido, seguro, eficienteGit - Rápido, seguro, eficiente
Git - Rápido, seguro, eficiente
 
Git lighting talk
Git lighting talkGit lighting talk
Git lighting talk
 
Minicurso GIT Completo (2022)
Minicurso GIT Completo (2022)Minicurso GIT Completo (2022)
Minicurso GIT Completo (2022)
 
Oficina de Git EEDACT2015
Oficina de Git EEDACT2015Oficina de Git EEDACT2015
Oficina de Git EEDACT2015
 
Git workshop
Git workshopGit workshop
Git workshop
 
Git e GitHub
Git e GitHubGit e GitHub
Git e GitHub
 
Git e Gitlab para Iniciantes
Git e Gitlab para IniciantesGit e Gitlab para Iniciantes
Git e Gitlab para Iniciantes
 
Desmistificando a ferramenta git
Desmistificando a ferramenta gitDesmistificando a ferramenta git
Desmistificando a ferramenta git
 
Controle de versão e colaboração com Git
Controle de versão e colaboração com GitControle de versão e colaboração com Git
Controle de versão e colaboração com Git
 

Kürzlich hochgeladen

Evangeliza - Diálogo com os Espíritos - Médiuns Esclarecedores
Evangeliza - Diálogo com os Espíritos - Médiuns EsclarecedoresEvangeliza - Diálogo com os Espíritos - Médiuns Esclarecedores
Evangeliza - Diálogo com os Espíritos - Médiuns EsclarecedoresAntonino Silva
 
LIÇÕES - PG my life usar uma vez por semana
LIÇÕES - PG my life usar uma vez por semanaLIÇÕES - PG my life usar uma vez por semana
LIÇÕES - PG my life usar uma vez por semanaWillemarSousa1
 
GÊNESIS A-2.pptx ESTUDO INTEGRADO DE CAPITULO 1 E
GÊNESIS A-2.pptx ESTUDO INTEGRADO DE CAPITULO 1 EGÊNESIS A-2.pptx ESTUDO INTEGRADO DE CAPITULO 1 E
GÊNESIS A-2.pptx ESTUDO INTEGRADO DE CAPITULO 1 EMicheleRosa39
 
Bem aventurados os puros de coração, pois verão a Deus: Verdadeira Pureza , ...
Bem aventurados os puros de coração, pois verão a Deus:  Verdadeira Pureza , ...Bem aventurados os puros de coração, pois verão a Deus:  Verdadeira Pureza , ...
Bem aventurados os puros de coração, pois verão a Deus: Verdadeira Pureza , ...silvana30986
 
Gestos e Posturas na Santa Missa_20240414_055304_0000.pptx
Gestos e Posturas na Santa Missa_20240414_055304_0000.pptxGestos e Posturas na Santa Missa_20240414_055304_0000.pptx
Gestos e Posturas na Santa Missa_20240414_055304_0000.pptxSebastioFerreira34
 
Série Evangelho no Lar - Pão Nosso - Cap. 129 - Ao partir do pão
Série Evangelho no Lar - Pão Nosso - Cap. 129 - Ao partir do pãoSérie Evangelho no Lar - Pão Nosso - Cap. 129 - Ao partir do pão
Série Evangelho no Lar - Pão Nosso - Cap. 129 - Ao partir do pãoRicardo Azevedo
 
Lição 3 - O céu - o Destino do Cristão.pptx
Lição 3 - O céu - o Destino do Cristão.pptxLição 3 - O céu - o Destino do Cristão.pptx
Lição 3 - O céu - o Destino do Cristão.pptxCelso Napoleon
 
2024 - PPT_Sermֶo 01 - Quartas de Poder - PT.pptx
2024 - PPT_Sermֶo 01 - Quartas de Poder - PT.pptx2024 - PPT_Sermֶo 01 - Quartas de Poder - PT.pptx
2024 - PPT_Sermֶo 01 - Quartas de Poder - PT.pptxhenrygabrielsilvarib
 
LIÇÃO 02 - JOVENS - Escola Bíblica Dominical
LIÇÃO 02 - JOVENS - Escola Bíblica DominicalLIÇÃO 02 - JOVENS - Escola Bíblica Dominical
LIÇÃO 02 - JOVENS - Escola Bíblica DominicalAmaroJunior21
 
10 Orações Para Honrar São José Operário
10 Orações Para Honrar São José Operário10 Orações Para Honrar São José Operário
10 Orações Para Honrar São José OperárioNilson Almeida
 
07 - SINAIS DA VOLTA DE JESUS.ppt.IASD>JA
07 - SINAIS DA VOLTA DE JESUS.ppt.IASD>JA07 - SINAIS DA VOLTA DE JESUS.ppt.IASD>JA
07 - SINAIS DA VOLTA DE JESUS.ppt.IASD>JAhenrygabrielsilvarib
 

Kürzlich hochgeladen (12)

Evangeliza - Diálogo com os Espíritos - Médiuns Esclarecedores
Evangeliza - Diálogo com os Espíritos - Médiuns EsclarecedoresEvangeliza - Diálogo com os Espíritos - Médiuns Esclarecedores
Evangeliza - Diálogo com os Espíritos - Médiuns Esclarecedores
 
LIÇÕES - PG my life usar uma vez por semana
LIÇÕES - PG my life usar uma vez por semanaLIÇÕES - PG my life usar uma vez por semana
LIÇÕES - PG my life usar uma vez por semana
 
GÊNESIS A-2.pptx ESTUDO INTEGRADO DE CAPITULO 1 E
GÊNESIS A-2.pptx ESTUDO INTEGRADO DE CAPITULO 1 EGÊNESIS A-2.pptx ESTUDO INTEGRADO DE CAPITULO 1 E
GÊNESIS A-2.pptx ESTUDO INTEGRADO DE CAPITULO 1 E
 
Bem aventurados os puros de coração, pois verão a Deus: Verdadeira Pureza , ...
Bem aventurados os puros de coração, pois verão a Deus:  Verdadeira Pureza , ...Bem aventurados os puros de coração, pois verão a Deus:  Verdadeira Pureza , ...
Bem aventurados os puros de coração, pois verão a Deus: Verdadeira Pureza , ...
 
Gestos e Posturas na Santa Missa_20240414_055304_0000.pptx
Gestos e Posturas na Santa Missa_20240414_055304_0000.pptxGestos e Posturas na Santa Missa_20240414_055304_0000.pptx
Gestos e Posturas na Santa Missa_20240414_055304_0000.pptx
 
Série Evangelho no Lar - Pão Nosso - Cap. 129 - Ao partir do pão
Série Evangelho no Lar - Pão Nosso - Cap. 129 - Ao partir do pãoSérie Evangelho no Lar - Pão Nosso - Cap. 129 - Ao partir do pão
Série Evangelho no Lar - Pão Nosso - Cap. 129 - Ao partir do pão
 
Lição 3 - O céu - o Destino do Cristão.pptx
Lição 3 - O céu - o Destino do Cristão.pptxLição 3 - O céu - o Destino do Cristão.pptx
Lição 3 - O céu - o Destino do Cristão.pptx
 
Fluido Cósmico Universal e Perispírito.ppt
Fluido Cósmico Universal e Perispírito.pptFluido Cósmico Universal e Perispírito.ppt
Fluido Cósmico Universal e Perispírito.ppt
 
2024 - PPT_Sermֶo 01 - Quartas de Poder - PT.pptx
2024 - PPT_Sermֶo 01 - Quartas de Poder - PT.pptx2024 - PPT_Sermֶo 01 - Quartas de Poder - PT.pptx
2024 - PPT_Sermֶo 01 - Quartas de Poder - PT.pptx
 
LIÇÃO 02 - JOVENS - Escola Bíblica Dominical
LIÇÃO 02 - JOVENS - Escola Bíblica DominicalLIÇÃO 02 - JOVENS - Escola Bíblica Dominical
LIÇÃO 02 - JOVENS - Escola Bíblica Dominical
 
10 Orações Para Honrar São José Operário
10 Orações Para Honrar São José Operário10 Orações Para Honrar São José Operário
10 Orações Para Honrar São José Operário
 
07 - SINAIS DA VOLTA DE JESUS.ppt.IASD>JA
07 - SINAIS DA VOLTA DE JESUS.ppt.IASD>JA07 - SINAIS DA VOLTA DE JESUS.ppt.IASD>JA
07 - SINAIS DA VOLTA DE JESUS.ppt.IASD>JA
 

Introdução ao Git

  • 1. Introdução ao Git Author: Eduardo R. D’Avila <erdavila@gmail.com> Date: Tue Mar 26 19:00:00 2013 -0300
  • 2. Tópicos Introdução Commits Branches e Tags Interação entre Repositórios Comandos e Opções Diversas 2
  • 3. Por que usar um SCM? Permite: • restaurar versões anteriores • juntar alterações feitas concorrentemente • identificar o que foi alterado em cada edição • identificar qual alteração introduziu um bug • identificar quem fez cada alteração e quando • marcar versões • analisar como o projeto evolui 3
  • 4. Centralizado x Distribuído Centralizado Distribuído CVS Git é Distribuído • Todo diretório de trabalho é um repositório completo • Contém todo histórico de alterações • Principais operações são locais • Sem dependência de um servidor • Somente operações de “sincronização” necessitam acesso a outros repositórios 4
  • 5. Repositórios Repositório do desenvolvedor • Um diretório usado para se trabalhar no projeto • Contém arquivos do projeto disponíveis para serem editados • Dados do Git no diretório .git na raiz do projeto Repositório para ser compartilhado (bare) • Um diretório usado para compartilhar o projeto • Sem arquivos do projeto disponíveis para serem editados • Dados do Git diretamente na raiz do projeto Criação de repositório: • git init [--bare] <diretório> 5
  • 6. Configuração inicial Configurar nome e e-mail do desenvolvedor: • git config --global user.name "Nome do Desenvolvedor" • git config --global user.email username@domínio.com Recomendado: habilitar cores • git config --global color.ui true 6
  • 8. Commit Um commit representa um estado do projeto Contém também autor, data, descrição Também chamado de “revisão” Cada commit tem um ancestral Exceções: • O primeiro commit do projeto • Commits resultantes de merge A cadeia de commits forma o histórico de alterações do projeto D E F A B C I G H 8
  • 9. Commit Como fazer um commit 1. Usar o comando git-add para marcar os arquivos a serem incluídos no próximo commit: • git add <arquivo>... <diretório>... # Inclui arquivos recursivamente 2. Efetuar o commit: • git commit [-m "descrição"] Visualizar o histórico de commits A partir do mais recente commit 2874505bdb80ee8790296428576d977c28708e7f • git log [<parâmetros>...] Author: Eduardo R. D'Avila <erdavila@gmail.com> Date: Sat Jul 28 13:48:56 2012 -0300 Force loading order of test scripts Commits são identificados por hashes SHA1 (40 caracteres) • Gerados pelo Git • Só é necessário usar caracteres o suficiente para não ser ambíguo, a partir de 4 caracteres 9
  • 10. Commit Index / Staging Area / Cache É um estágio pré-commit – representa o estado que se tornará o próximo commit arquivo git add git commit index commit alterado Para identificar arquivos alterados desde o último commit: git status Para fazer commit diretamente todos os arquivos alterados: git commit -a 10
  • 11. Comando status index / staging area / cache Arquivos versionados mas não-alterados não aparecem na saída do comando status 11
  • 12. Comandos Básicos Marcar o que vai ser incluído no próximo commit (adicionar ao index) Arquivos novos ou alterados: • git add <arquivos>... <diretórios>... Remover do versionamento e apagar: • git rm <arquivos>... • git rm –r <diretórios>... # Remove arquivos recursivamente Remover do versionamento sem apagar: • git rm --cached <arquivos>... Renomear ou mover arquivo: • git mv <nome antes> <nome depois>... Verificar o estado • git status Efetuar o commit • git commit 12
  • 14. Branches Branches são como “realidades alternativas” Cada branch tem um nome Branch master é criado por padrão • Não tem nada de especial – Pode ser renomeado – Pode ser removido – Pode ser recriado 14
  • 15. Branches São implementados como referências a commits master format master master bullets master align clipboard O nome do branch pode ser usado no lugar do commit em comandos 15
  • 16. Operações com branches Criar • git branch <branch> [<commit>] # somente cria • git checkout –b <branch> [<commit>] # cria e alterna para o branch Listar • git branch O branch atual é marcado com “*” Alternar • git checkout <branch> Merge • git merge <outro branch> Excluir • git branch –d <branch> # somente se foi “mergeado” no branch atual • git branch –D <branch> Remove somente a referência. Os commits continuam no histórico. 16
  • 17. Merge Junta ao branch atual as alterações de outro branch Um novo commit é criado A não ser que: • Resulte em um “fast-forward” • Haja algum conflito! Facilmente identificável no histórico HEAD $ git checkout master master $ git merge new-feature D E F A B C I G H new-feature 17
  • 18. Fast-forward Simplesmente avança o branch atual para alcançar o outro branch $ git checkout master $ git merge new-feature HEAD master A B C D E new-feature 18
  • 19. Merge com conflito // Calculate // Calculate function f(x) { function f(x) { main.js return x + 2; <<<<<<< HEAD function f(x) { } return x + 2; return x; ======= } merge return 2 * x; >>>>>>> other-branch function f(x) { } return 2 * x; } $ git merge other-branch Auto-merging main.js CONFLICT (content): Merge conflict in main.js Automatic merge failed; fix conflicts and then commit the result. $ git status # On branch master # Unmerged paths: # (use "git add/rm <file>..." as appropriate to mark resolution) # # both modified: main.js # no changes added to commit (use "git add" and/or "git commit -a") 19
  • 20. Merge com conflito - resolução O que fazer? • Editar arquivos resolvendo os conflitos • git add <arquivos> # Marca a resolução dos conflitos • git commit # Finaliza o merge ou cancelar: • git merge --abort Ferramentas de merge externas • Git suporta por padrão: araxis, bc3, diffuse, ecmerge, emerge, gvimdiff, kdiff3, meld, opendiff, p4merge, tkdiff, tortoisemerge, vimdiff, xxdiff • Outras ferramentas podem ser suportadas através de configurações adicionais • git mergetool [--tool=<ferramenta>] [<arquivo>] 20
  • 21. HEAD HEAD é o estado do histórico sobre o qual se está trabalhando Implementado como referência a um branch (o branch atual) ou diretamente a um commit HEAD git checkout <branch> master • HEAD referencia o branch, que por sua vez referencia o commit • HEAD é o commit mais recente do branch A B C • Ao fazer um commit, o branch avança HEAD git checkout <commit ou branch remoto ou tag> • HEAD referencia diretamente um commit A B C • Repositório fica em “detached HEAD” • Ao fazer um commit, HEAD avança • Cuidado! Garbage collector pode eliminar commits sem referência 21
  • 22. Tags Marcam uma versão do projeto São implementadas como referências a commits Não podem ser alteradas Podem ser assinadas com GPG Listar • git tag Criar • git tag <nome> [<commit>] 22
  • 24. Workflows repositório compartilhado ditador repositório público desenvolvedores tenentes desenvolvedores 24
  • 25. Repositórios Remotos Identificados por uma URL ou caminho: Sistema de arquivos local: • /git/projeto.git • ../outro-projeto • file:///home/fulano/projeto SSH (Git deve estar instalado no servidor): • ssh://usuario@servidor/caminho • usuario@servidor:caminho Outros protocolos: • git://servidor/caminho – Serviço do Git no servidor • http[s]://servidor/caminho • ftp[s]://servidor/caminho • rsync://servidor/caminho 25
  • 26. Nomes de Repositórios Remotos Nomes podem ser usados para referenciar repositórios remotos Definir um nome para um repositório remoto em um repositório existente: • git remote add <nome> <url ou caminho> Múltiplos repositórios podem ser referenciados – afinal Git é distribuído! Listar repositórios remotos: • git remote –v Clonagem de repositório • git clone [--bare] <url ou caminho> [<diretório>] Automaticamente define o nome “origin” para referenciar o repositório clonado 26
  • 27. Branches Remotos Cada repositório tem seu conjunto de branches Branches remotos identificam o estado de um branch em um repositório remoto Identificados por “<repositório>/<branch>” ou “remotes/<repositório>/<branch>” Repositório X Repositório Y Usa o nome “origin” para referenciar o repositório Y A B D master C master E feature A B D origin/master E origin/feature F new-feature Listar branches remotos • git branch -r # Lista somente branches remotos • git branch -a # Lista branches locais e remotos (o atual é marcado com “*”) 27
  • 28. Operações com repositórios remotos Somente duas operações básicas envolvem comunicação com repositório remoto git fetch [--tags] <repositório> • Atualiza branches e tags (e seus commits) do repositório remoto • Não toca nos branches locais git push [--tags] <repositório> <branch local>:<branch remoto> • Atualiza (ou cria) o branch do repositório remoto com o estado do branch local • Só funciona se for um “fast-forward” (pois não há como fazer um merge remoto) Extra: git pull <repositório> <branch remoto> • Executa um fetch do branch remoto e faz merge com o branch atual 28
  • 29. Branches “seguidos” (tracked) Cada branch local pode estar associado a um branch remoto Criar um branch a partir de um branch remoto faz a associação automaticamente: • git branch <novo branch local> <repositório>/<branch remoto> • git checkout -b <novo branch local> <repositório>/<branch remoto> Associar branch já existente: A partir da • git branch --set-upstream <branch local> <repositório>/<branch remoto> versão 1.8.0 • git branch --set-upstream-to <repositório>/<branch remoto> <branch local> Operações simplificadas no branch atual: • git pull # Sem mais parâmetros! • git push # Sem mais parâmetros! Listar associações: • git branch -v -v # Mesmo parâmetro duas vezes 29
  • 30. Exemplo Local origin origin/feature E F feature E F A B G A B G C D C D feature HEAD $ git fetch origin $ git checkout -b feature origin/feature $ git add <arquivos> ; git commit $ git push ERRO! $ git pull # fetch + merge $ git push 30
  • 32. Comandos Git tem mais de 130 (!) comandos Os comandos são classificados como: • “porcelain” – Comandos de alto nível. Para serem usados por humanos • “plumbing” – Comandos de baixo nível. Para serem usados por scripts Em comandos que esperam um commit como parâmetro, pode-se usar qualquer item que referencie o commit: • branch • tag • HEAD • branch remoto Ajuda • man git-<comando> • git help <comando> 32
  • 33. Comando stash Guarda temporariamente alterações pendentes Útil quando se começa uma tarefa e precisa-se alternar para outra tarefa no Git Funciona como uma pilha: • stash@{0} (ou simplesmente “stash”) – no topo da pilha. É o default para pop, apply e drop • stash@{1} • stash@{2} • ... Comandos • git stash [save ["descrição"]] # cria novo stash no topo da pilha • git stash pop [--index] [<stash-id>] # aplica e remove stash da pilha • git stash apply [--index] [<stash-id>] # aplica stash • git stash list # lista todos os stashes • git stash drop [<stash-id>] # descarta stash da pilha sem aplicá-lo • git stash clear # descarta todos os stashes • git show <stash-id> # mostra alterações do stash O parâmetro --index faz restaurar o que estava no index quando o stash foi salvo A aplicação de um stash em um outro commit é sujeita a conflitos 33
  • 34. Comando log Lista commits em ordem inversa (o mais recente primeiro) Provê muitas opções de visualização do histórico • git log [<commits ...>] – Histórico a partir dos commits ou branches especificados • git log [<commit1>]..[<commit2>] – Histórico do que o <commit2> tem de novo em relação ao <commit1> • git log [--follow] -- <arquivo ou diretório> – Lista somente commits que incluem alterações no <arquivo ou diretório>. O parâmetro --follow força a identificação de renomeação e cópias de arquivo. Algumas opções: • -S <string> – Lista somente commits que removeram ou incluíram <string> em algum arquivo • --stat – Inclui lista de arquivos que foram alterados em cada commit e estatísticas • -p [-C] – Inclui as alterações de cada arquivo (diffs) e, opcionalmente, detecta renomeações e cópias • --oneline – Mostra somente hash e mensagem de cada commit • --graph – Mostra grafo de branches e merges • --decorate – Identifica outras referências (branches e tags) no histórico 34
  • 35. Comandos show / diff / blame show – Exibe informações de um commit e/ou alterações e conteúdo de arquivos • git show [<commit>] – Mostra dados do commit e suas alterações de arquivo • git show <commit> -- <arquivo> – Mostra alterações feitas no ARQUIVO no commit especificado • git show <commit>:<arquivo> – Mostra conteúdo do ARQUIVO no commit especificado diff - Mostra diferenças em conteúdos de arquivos • git diff – Mostra alterações que ainda não estão no index • git diff --cached – Mostra alterações que estão no index • git diff <commit> – Mostra diferenças entre o estado atual e o commit • git diff <commit1> <commit2> – Mostra diferenças entre os commits • git diff -- <arquivo> – Seleciona arquivo para mostrar diferenças blame – Exibe informações de quando cada linha de um arquivo foi alterada e quem fez a alteração • git blame <arquivo> 35
  • 36. Comando cherry-pick Re-aplica alterações de um único commit $ git checkout master new-feature $ git cherry-pick E D E F A B C E’ master HEAD Pode ser necessário resolver conflitos 36
  • 37. Comando revert Inverte as alterações feitas por um commit $ git checkout master $ git revert B HEAD master A B C D E B’ Pode ser necessário resolver conflitos 37
  • 38. Ferramentas gráficas gitk Correspondente ao comando git log, mas mais visual e navegável git gui Provê funcionalidades de commit, merge, gerência de branches e de repositórios remotos, entre outras opções EGit/JGit Plugin para Eclipse SourceTree http://www.sourcetreeapp.com/ 39
  • 40. Links Pro Git http://git-scm.com/book Git Cheatsheet (stash x work-dir x index x local x remote) http://ndpsoftware.com/git-cheatsheet.html A Visual Git Reference http://marklodato.github.com/visual-git-guide/index-en.html git ready http://gitready.com/ 41

Hinweis der Redaktion

  1. Branch “format”Negrito – “format” avançaItálico e sublinhadoBranch “align”“align” avançaMergeBranch “clipboard”“align” avançaBranch “bullets” “bullets” vai usar algo que foi feito na implementação de “clipboard” “clipboard” avança Merge: clipboard + align Fim: “bullets” avança; merge