Escolar Documentos
Profissional Documentos
Cultura Documentos
FC-SLI-2020-2
Gerenciamento de código com Git e GitHub
1
07/10/2020
Evolução
• Sistemas de Controle de Versão Locais
▫ Exemplo: rcs
mantém conjuntos de patches (diferenças entre os
arquivos) entre cada mudança em um formato
especial.
A partir daí qualquer arquivo em qualquer ponto na
linha do tempo pode ser recriado ao juntar-se todos
os patches.
2
07/10/2020
Evolução
• Sistemas de Controle de Versão Locais
Evolução
• Sistemas de Controle de Versão Centralizados
▫ Exemplos: CVS, Subversion e Perforce
Possuem um único servidor central que contém
todos os arquivos versionados e vários clientes que
podem resgatar (check out) os arquivos do servidor.
Todos podem ter conhecimento razoável sobre o que
os outros desenvolvedores estão fazendo no projeto.
O servidor central é um ponto único defalha.
3
07/10/2020
Evolução
• Sistemas de Controle de Versão Centralizados
Evolução
• Sistemas de Controle de Versão Distribuídos
▫ Exemplos: Git, Mercurial, Bazaar e Darcs
Os clientes não apenas fazem cópias das últimas versões
dos arquivos: eles são cópias completas do repositório.
Se um servidor falha, qualquer um dos repositórios dos
clientes pode ser copiado de volta para o servidor para
restaurá-lo.
Cada checkout (resgate) é na prática um backup completo
de todos os dados.
Muitos desses sistemas lidam muito bem com o aspecto
de ter vários repositórios remotos com os quais eles
podem colaborar.
Permite que você estabeleça diferentes tipos de fluxos de
trabalho que não são possíveis em sistemas centralizados.
8
4
07/10/2020
Evolução
• Sistemas de Controle de Versão Distribuídos
Git
• Concebido em 2005 por Linus Torvalds para
gerenciar o código do Linux.
• Incrivelmente rápido.
• Tem todo o histórico do projeto no seu disco local.
▫ A maior parte das operações parece ser quase
instantânea.
• Quase todas operações são locais
▫ Há poucas coisas que você não possa fazer caso esteja
offline.
• Git tem integridade
▫ Arquivos com checksum SHA-1.
10
5
07/10/2020
Git
• Implementação rápida e moderna de controle de
versão
• Fornece um histórico de alterações de conteúdo.
• Facilita alterações colaborativas em arquivos.
• Relativamente fácil de usar.
11
Git
12
6
07/10/2020
Git é rápido!!!
13
Git é eficiente!!!
14
7
07/10/2020
Git é leve!!!
15
16
8
07/10/2020
17
Git Local
• Distribuído de modo que a falta de conectividade
não afeta o trabalho
• Aprendizado dos seus comandos pode ocorrer
progressivamente.
18
9
07/10/2020
Git distribuído
• Voltado para trabalho em equipe, de modo que a
colaboração ocorre naturalmente.
19
20
10
07/10/2020
21
Instalação
• Linux (Ubuntu)
▫ sudo apt-get install git-core gitk tig
• Windows
▫ Baixar e instalar a versão mais recente
• Mac OS
▫ Baixar e instalar a versão mais recente
22
11
07/10/2020
23
24
12
07/10/2020
25
Os três estados
• Arquivos sempre estão em um dos três estados
fundamentais:
▫ modificado (modified)
arquivo que sofreu mudanças, mas que ainda não foi
consolidado na base de dados.
▫ preparado (staged)
quando você marca um arquivo modificado em sua
versão corrente para que ele faça parte do snapshot
do próximo commit (consolidação).
▫ consolidado (committed)
Dados seguramente armazenados em sua base de
dados local.
26
13
07/10/2020
Repositório local
• Consiste em três "árvores" mantidas pelo git:
▫ Working Directory
Contém os arquivos vigentes.
▫ Index
Funciona como uma área temporária
▫ HEAD
Aponta para o último commit (confirmação) que você fez
É uma referência para o último commit do branch atual
27
Área de preparação
28
14
07/10/2020
29
▫ Se o usuário não for definido durante o clone, ele será requisitado sempre que
for feita alguma operação remota que exija autenticação.
30
15
07/10/2020
GitHub
• Março/2012
▫ ~1,5 milhão de usuários
▫ ~2,5 milhões de repositórios
31
32
16
07/10/2020
Alterando os dados de um
repositório remoto já configurado
• git remote set-url origin https://
usuario@github.com/wlagithub/fc-sli-2020-2.git
33
34
17
07/10/2020
Adicionar e confirmar
• Você pode propor mudanças (adicioná-las
ao Index) usando:
▫ git add <arquivo>
▫ git add .
▫ git add *
Enviando alterações
• Alterações agora estão no HEAD da cópia de
trabalho local.
• Para enviá-las ao repositório remoto:
▫ git push origin master
Repositório remoto:origin
Branch local: master
36
18
07/10/2020
Ramificações - Branches
• Usados para desenvolver funcionalidades isoladas
umas das outras.
• Branch master – branch padrão ao criar um
repositório.
• Use branches durante o desenvolvimento e depois,
mescle-os (merge) ao master.
37
Ramificações - Branches
• Branch é uma ramificação no desenvolvimento.
• Uma técnica utilizada é fazer um branch para cada
funcionalidade implementada
• Criar e selecionar um novo branch
▫ git checkout -b funcionalidade_x
• Retornar ao branch master
▫ git checkout master
• Remover o branch
▫ git branch -d funcionalidade_x
• Enviando o novo branch ao repositório remoto
▫ git push origin funcionalidade_x
38
19
07/10/2020
Ramificações - Branches
39
Ramificações - Branches
40
20
07/10/2020
Ramificações - Branches
41
42
21
07/10/2020
Resolvendo conflitos
• Nem sempre é possível fazer o merge, pois
podem existir conflitos.
• Em caso de conflitos, é preciso editar
manualmente os arquivos.
• Após a edição, é preciso marcar os arquivos
como merged
▫ git add <arquivo>
• Para resolução de conflitos pode-se usar a
ferramenta diffmerge:
▫ http://prateekvjoshi.com/2013/06/30/how-to-
use-diffmerge/
43
22
07/10/2020
Rótulos - Tags
• Recomenda-se criar rótulos para releases de
software.
• Criar novo rótulo que referencia o id de commit
▫ git tag 1.0.0 1b2e1d63ff
• 1b2e1d63ff representa os 10 primeiros
caracteres do id de commit que é referenciado
com o rótulo.
• O id de commit deve ser único.
• Para obter o id de commit:
▫ git log
45
46
23
07/10/2020
47
48
24
07/10/2020
49
25
07/10/2020
51
Dicas
• Inteface gráfica padrão
▫ gitk
• Usar saídas do git coloridas
▫ git config color.ui true
• Exibir log em apenas uma linha por commit
▫ git config format.pretty oneline
• Fazer inclusões interativas
▫ git add –i
• Ferramenta de diff
▫ diffmerge
http://www.andrejkoelewijn.com/wp/2010/01/08/configure-diffmerge-with-git/
http://adventuresincoding.com/2010/04/how-to-setup-git-to-use-diffmerge
52
26
07/10/2020
Dicas
• tig
▫ Excelente interface texto para o Git.
53
54
27
07/10/2020
Exemplo de Workflow
55
28
07/10/2020
57
58
29
07/10/2020
60
30
07/10/2020
git add
• git add --A
▫ Todos os arquivos novos, alterados e removidos
para stage
• git add .
▫ Arquivos novos e alterados, mas não os removidos
para stage.
• git add –u
▫ Arquivos modificados e removidos, mas não novos
para stage.
61
git commit -a
• Significa quase o mesmo que:
▫ git add --u && git commit
▫ A diferença é sutil e só existe se não estiver na raiz
do repositório.
62
31
07/10/2020
git reset
• --soft
▫ Move para onde está o HEAD
• sem opção
▫ Faz o anterior e faz com que o Index fique como o
HEAD
• --hard
▫ Faz o anterior e faz com que o diretório de
trabalho fique como o Index.
63
64
32
07/10/2020
Usando SSH com porta não default no servidor (Exemplo: porta 1720):
git clone
ssh://usuario@host:1720/~/meu_projeto.git 65
Repositório Bare
• Contém as informações de controle de versão,
mas não tem diretório de trabalho, nem o sub-
diretório .git.
▫ Todo o contéudo que estaria dentro do sub-
diretório .git fica direto na raiz da aplicação.
• O repositório precisa ser bare (sem arquivos de
trabalho) para poder aceitar um push.
• Push só é possível em repositórios “bare” (sem
arquivos de trabalho)
66
33
07/10/2020
Referências
• Site e documentação oficial
▫ http://git-scm.com/
▫ http://git-scm.com/documentation
• git - guia prático: apenas um guia prático para
começar com git. sem complicação ;)
▫ http://rogerdudler.github.io/git-guide/
index.pt_BR.html
• Pro Git book
▫ http://git-scm.com/book/pt-br/
• Git Cheatsheets
▫ http://ndpsoftware.com/git-cheatsheet.html
▫ https://na1.salesforce.com/help/pdfs/en/
salesforce_git_developer_cheatsheet.pdf 67
Referências
• Apresentações sobre Git
▫ http://tableless.com.br/slides-devs-10-git/
• Excelente tutorial sobre Git!!!
▫ https://www.atlassian.com/git/
68
34