git$ - universidade federal fluminenseleomurta/courses/2014.1/gps/git.pdf · 2020-02-03 ·...
TRANSCRIPT
Git Bruno de Pinho Sche.no [email protected]
Histórico • Desenvolvido para apoiar o projeto do kernel do Linux
• De 1991 até 2002 as mudanças no código eram passadas através de troca de arquivos
• De 2002 a 2005 projeto do kernel do Linux uIlizou um SCV chamado BitKeeper
• Em 2005, o BitKeeper deixaria de ser gratuito
• EsImulou Linus Torvalds a desenvolver o próprio SCV para apoiar o projeto do kernel.
2
Características • Topologia distribuída • Armazenamento de snapshots • Facilidade para trabalhar com ramos (branches) e eIquetas (tags)
3
Fonte: Slides do professor Leonardo Murta
Problema da concorrência
4
Fonte: Slides do professor Leonardo Murta
Política pessimista
5
Fonte: Slides do professor Leonardo Murta
Política pessimista • Problemas administraIvos
• Bloqueios esquecidos podem atrasar o andamento do projeto
• Problemas de serialização desnecessária • Em alguns casos, as modificações atuam sobre partes independentes dos arquivos bloqueados
• Falsa sensação de segurança • Dependências semânIcas podem cruzar a fronteira de arquivos
• Bloqueios são necessários • Quando se trata de arquivos que não podem ser combinados 6
Política otimista (1/2)
7
Fonte: Slides do professor Leonardo Murta
Política otimista (2/2)
8
Fonte: Slides do professor Leonardo Murta
Controle de concorrência no Git • PolíIca oImista
• Vários usuários podem alterar o mesmo arquivo • Git tenta realizar um merge automáIco • Caso haja conflitos, eles devem ser resolvidos pelo usuário
9
Sistema de arquivos tradicional
10
Dimen
são ESPA
ÇO
Fonte: Slides do professor Leonardo Murta
Sistema de arquivos versionado
11
Dimen
são ESPA
ÇO
Dimensão TEMPO
Fonte: Slides do professor Leonardo Murta
Repositório local • Diretório comum no sistema de arquivos local • Guarda uma cópia do repositório
• Permite algumas operações off-‐line • Permite transmissão de commits para o repositório remoto
• Área isolada das modificações de outros desenvolvedores • Suas modificações podem ser publicadas com push • Modificações de outros podem ser incorporadas com pull
12
Espaço de Trabalho e Índice • Espaço de Trabalho
• Área onde as mudanças são realizadas pelo usuário • Arquivos são modificados, criados ou removidos
• Índice • Área temporária uIlizada entre o repositório local e o espaço de trabalho
• Permite escolher quais mudanças feitas no espaço de trabalho serão adicionadas a um commit
13
14
Adaptado de http://nbviewer.ipython.org/github/LUMC/programming-course/blob/master/images/git-remote.png
Fluxo
Comando clone
15
• Clona um repositório em um novo diretório
• Cria o vínculo entre as branches do clone e do repositório clonado
Comando clone
16
Exemplo
Sintaxe
git clone [URL]
HEAD
17
• Ponteiro que controla em qual estado do repositório o sistema está trabalhando
• Aponta para um commit
Comando status
18
• Mostra o estado do repositório local
• Mostra os arquivos e diretórios que contêm diferenças entre o índice e o HEAD
Comando status
19
Exemplo
Sintaxe
git status
Comando add
20
• Adiciona conteúdo de arquivos ao índice
• Prepara para o commit
Comando add
21
Exemplo
Sintaxe
git add [caminho]
Comando rm
22
• Remove arquivos do índice e do espaço de trabalho
• Adiciona a remoção do arquivo nas mudanças do commit
Comando rm
23
Exemplo
Sintaxe
git rm [caminho]
Comando commit
24
• Grava mudanças no repositório local
• Armazena o conteúdo atual do índice em um novo commit, juntamente com uma mensagem de log do usuário que descreve as mudanças
Comando commit
25
Exemplo
Sintaxe
git commit [<caminho>] [<opções>]
Comando commit
26
Comando commit
27
Comando push
28
• Atualiza o repositório remoto com as mudanças locais
Comando push
29
Exemplo
Sintaxe
git push [<caminho_repositorio>] [<opções>]
Comando pull
30
• Incorpora as alterações de um repositório remoto no ramo (branch) atual
Comando pull
31
Sintaxe
git pull [<caminho_repositorio>] [<opções>]
Comando pull
32
Exemplo
Comando checkout
33
• Alterna entre ramos
• Retorna arquivos ao estado de uma versão específica
• Se nenhum parâmetro for especificado, retorna à versão do índice
• Pode retornar para um commit ou tag
Comando checkout
34
Exemplo
Sintaxe
git checkout <ramo>
Comando checkout
35
Sintaxe
git checkout <caminho>
Comando checkout
36
Exemplo
Comando reset
37
• Muda o ponteiro do HEAD para o estado especificado
Comando reset
38
Sintaxe
git reset [commit_id]
Comando reset
39
Exemplo
Comportamento dos comandos Novos
commits locais
Novos commits remotos
Comando push Commando pull
Não Não Nenhuma ação Nenhuma ação
Não Sim Nenhuma ação Versão local substituída pela versão do repositório remoto
Sim Não Publica a versão local no repositório remoto
Nenhuma ação
Sim Sim Falha, avisando que o repositório local está desatualizado
Versão local combinada com a versão do repositório remoto
40
Ciclo básico de trabalho
41
Construção do espaço de trabalho
git clone git pull
git branch git checkout
Implementação
git add git rm git log
Verificação
git status git diff
git checkout git reset
Integração
git pull git commit git push
Etiquetas e Ramos • EIquetas (tags)
• Ponteiros para snapshots • Uso do nome da eIqueta no lugar do hash do commit
• Ramos (branches) • Também são ponteiros para snapshots • Ponteiro se move independente do ponteiro de outros ramos
42
Junção (fast-‐foward)
43
Fonte: http://git-scm.com/book/en/Git-Branching-Basic-Branching-and-Merging
Junção (fast-‐foward)
44
Fonte: http://git-scm.com/book/en/Git-Branching-Basic-Branching-and-Merging
Junção (three way)
45
Fonte: http://git-scm.com/book/en/Git-Branching-Basic-Branching-and-Merging
Junção (three way)
46
Fonte: http://git-scm.com/book/en/Git-Branching-Basic-Branching-and-Merging
Junção (three way)
47
Fonte: http://git-scm.com/book/en/Git-Branching-Basic-Branching-and-Merging
Comando branch
48
• Lista, cria ou deleta ramos
Comando branch
49
Exemplo
Sintaxe
git branch [<opções>]
Comando merge
50
• Mescla duas histórias de desenvolvimento
• Incorpora alterações dos commits no ramo atual
Comando merge
51
Sintaxe
git merge [nome_do_ramo]
Comando merge
52
Exemplo
Comando merge
53
Exemplo
Resolvendo conSlitos
54
Resolvendo conSlitos
55
Resolvendo conSlitos
56
Resolvendo conSlitos
57
Comando tag
58
• Lista, cria ou deleta etiquetas
Comando tag
59
Exemplo
Sintaxe
git tag [<opções>] <nome>
Comando log • Fornece um relatório sobre as versões do repositório • Por arquivo • Por commit
• Exibe, para cada versão • IdenIficação (hash do commit) • Quem (autor) • Quando (data) • Onde (caminhos) • Como (ação nos caminhos) • O que (mensagem) • Por que (número da solicitação de modificação)
60
Comando log
61
Sintaxe
git log [<opções>] [<intervalo de revisões>] [[-‐-‐] <caminho>…]
Comando log
62
Exemplo
Comando log
63
Exemplo
Comando diff
64
• Mostra diferenças entre arquivos
• Normalmente, usamos para ver diferenças entre a versão atual de um arquivo no repositório e o mesmo arquivo no espaço de trabalho
Comando diff
65
Exemplo
Sintaxe
git diff [<opções>]
Ferramentas úteis
• hpps://github.com/
• hpps://bitbucket.org/
66
Ferramentas úteis • hpp://www.sourcetreeapp.com/
• Dyevc
• Plugins em IDEs (Netbeans, Eclipse (EGit), Rubymine)
67
Exercício Apresente as principais funcionalidades do GitHub ou Bitbucket
68
Principais Referências • hpp://git-‐scm.com/ • Jon Loeliger (2009). “Version Control with Git: Powerful tools and techniques for collaboraIve soyware development”, O'Reilly Media
• Slides do professor Leonardo Murta. Disponíveis em hpp://www2.ic.uff.br/~leomurta/courses/2012.2/es2/aula5.pdf
69
Git Bruno de Pinho Sche.no [email protected]