Controle de Versões com Git
-
Upload
vagner-santana -
Category
Technology
-
view
516 -
download
2
description
Transcript of Controle de Versões com Git
![Page 2: Controle de Versões com Git](https://reader030.fdocument.pub/reader030/viewer/2022020123/558de5cf1a28abf9428b475e/html5/thumbnails/2.jpg)
AgendaIntroduçãoInstalação ConfiguraçãoIniciando um projetoÁreas do git CommitGerenciamento de índiceStash / BranchMerge / RebaseRepositórios remotos: Modelo Centralizado/ Modelo DistribuídoExtras
![Page 3: Controle de Versões com Git](https://reader030.fdocument.pub/reader030/viewer/2022020123/558de5cf1a28abf9428b475e/html5/thumbnails/3.jpg)
Dica:
Não se preocupe, o início sempre é difícil!
![Page 4: Controle de Versões com Git](https://reader030.fdocument.pub/reader030/viewer/2022020123/558de5cf1a28abf9428b475e/html5/thumbnails/4.jpg)
IntroduçãoHistória: Criado por para gerenciar o
desenvolvimento do kernel do linux (antes era utilizado o bitKeeper).
Linus Torvalds
![Page 5: Controle de Versões com Git](https://reader030.fdocument.pub/reader030/viewer/2022020123/558de5cf1a28abf9428b475e/html5/thumbnails/5.jpg)
Introdução
Git não tem nada a ver com o .Git é um filesystem distribuído. Ou seja não só códigosfontes, e sim qualquer tipo de arquivos.Muito eficiente e confiável.Utiliza para identificação dos commits.Dificilmente ocorre perca de arquivos no git.
Subversion
SHA1
![Page 6: Controle de Versões com Git](https://reader030.fdocument.pub/reader030/viewer/2022020123/558de5cf1a28abf9428b475e/html5/thumbnails/6.jpg)
Instalação
Linux
Instalando git e ssh
Gerando chaves ssh:
sudo apt-get install git-core git-svn ssh
ssh keygen -t rsa
![Page 7: Controle de Versões com Git](https://reader030.fdocument.pub/reader030/viewer/2022020123/558de5cf1a28abf9428b475e/html5/thumbnails/7.jpg)
Instalação
Windows
Download: Abrir git bash e gerar chaves ssh:
http://git-scm.com/download/win
ssh keygen -t rsa
![Page 8: Controle de Versões com Git](https://reader030.fdocument.pub/reader030/viewer/2022020123/558de5cf1a28abf9428b475e/html5/thumbnails/8.jpg)
Instalação
Mac
Download: Ou, usando
Gerando chaves ssh:
http://git-scm.com/download/machomebrew
brew install git
ssh keygen -t rsa
![Page 9: Controle de Versões com Git](https://reader030.fdocument.pub/reader030/viewer/2022020123/558de5cf1a28abf9428b475e/html5/thumbnails/9.jpg)
Configuração
Definindo nome e email para identificar autor
Verificando
Highlight
git config --global user.name "vagnervjs"git config --global user.email "[email protected]"
cat /Users/vagner/.gitconfig
//arquivo .gitconfigcolor: auto
![Page 10: Controle de Versões com Git](https://reader030.fdocument.pub/reader030/viewer/2022020123/558de5cf1a28abf9428b475e/html5/thumbnails/10.jpg)
Dica:
Sempre leia as mensagens!
![Page 11: Controle de Versões com Git](https://reader030.fdocument.pub/reader030/viewer/2022020123/558de5cf1a28abf9428b475e/html5/thumbnails/11.jpg)
Iniciando um projeto
Iniciar git em um projeto
Ajuda
Status
cd pasta_do_projetogit init
git help init
git status
![Page 12: Controle de Versões com Git](https://reader030.fdocument.pub/reader030/viewer/2022020123/558de5cf1a28abf9428b475e/html5/thumbnails/12.jpg)
Áreas do Git
Working directory: diretório atual detrabalhoStage area: índice.git: repositório de dados
![Page 13: Controle de Versões com Git](https://reader030.fdocument.pub/reader030/viewer/2022020123/558de5cf1a28abf9428b475e/html5/thumbnails/13.jpg)
Áreas do Git
http://git-scm.com/book/en/Getting-Started-Git-Basics
![Page 14: Controle de Versões com Git](https://reader030.fdocument.pub/reader030/viewer/2022020123/558de5cf1a28abf9428b475e/html5/thumbnails/14.jpg)
Continuando...
Adicionando arquivos ao índice
Após adicionar os arquivos ficam como new file, ou seja,a serem adicionados no próximo commit.Retirar do índice
Commit
Log
git add . file.txt //apenas arquivo file.txtgit add . "*.txt" //todos arquivos .txtgit add . //Todos arquivos do working directory
git rm --cached file.txt
git commit -m "Primeiro commit"
git log
![Page 15: Controle de Versões com Git](https://reader030.fdocument.pub/reader030/viewer/2022020123/558de5cf1a28abf9428b475e/html5/thumbnails/15.jpg)
Dica:
Sempre crie commits com mensagens descrevendo a alteração
feita no projeto!
![Page 16: Controle de Versões com Git](https://reader030.fdocument.pub/reader030/viewer/2022020123/558de5cf1a28abf9428b475e/html5/thumbnails/16.jpg)
Estrutura do commit
Commit é um pacote, um envelope.Após adicionar os arquivos ficam como new file, ou seja,a serem adicionados no próximo commit.Branch e tags apontam sempre para commitsCommits posuem um identificador em SHA1, o quetorna praticamente impossível conflito de commits.Mesmo utilizando trechos do SHA1 (até 5 caracteres nomáximo), ainda assim é possível identificar o commit.O git nunca duplica conteúdos entre commits, apenasfaz referência ao blob do commit anterior e adiciona osnovos arquivos.
![Page 17: Controle de Versões com Git](https://reader030.fdocument.pub/reader030/viewer/2022020123/558de5cf1a28abf9428b475e/html5/thumbnails/17.jpg)
Estrutura do commit
http://git-scm.com/book/en/Git-Branching-What-a-Branch-Is
![Page 18: Controle de Versões com Git](https://reader030.fdocument.pub/reader030/viewer/2022020123/558de5cf1a28abf9428b475e/html5/thumbnails/18.jpg)
Gerenciando o índice
http://git-scm.com/book/en/Git-Basics-Recording-Changes-to-the-Repository
![Page 19: Controle de Versões com Git](https://reader030.fdocument.pub/reader030/viewer/2022020123/558de5cf1a28abf9428b475e/html5/thumbnails/19.jpg)
Gerenciando o índice
Imagine as ações abaixo:
Como desfazer?
E para voltar ao ínicio (antes de modificiar o arquivofile.txt)
Para todos os arquivos
Moficação no arquivo file.txtgit add file.txt
git reset HEAD file.txt
git checkout -- file.txt
git reset HEAD //todos os arquivos voltam para status untracked
![Page 20: Controle de Versões com Git](https://reader030.fdocument.pub/reader030/viewer/2022020123/558de5cf1a28abf9428b475e/html5/thumbnails/20.jpg)
Gerenciando o índice
Jogar fora último commit
Esta operação parece destrutiva mas não é:
Voltar arquivos de commit para o índice
git reset HEAD~1 --hard //agora a cabeça aponta para o commit anterior
git reflog //guarda todas as coisas que foram jogadas fora git merge < sha1 do commit desejado >
git reset HEAD~1
![Page 21: Controle de Versões com Git](https://reader030.fdocument.pub/reader030/viewer/2022020123/558de5cf1a28abf9428b475e/html5/thumbnails/21.jpg)
Gerenciando o índice
Remover arquivos do índice
Limpar arquivos do working directory
Mais operações de índice...
git rm --cached < file >
git clean -f
git add -i
![Page 22: Controle de Versões com Git](https://reader030.fdocument.pub/reader030/viewer/2022020123/558de5cf1a28abf9428b475e/html5/thumbnails/22.jpg)
Stash
Situação: você está desenvolvendo uma novafuncionalidade e chega um pedido para resolver um bug.
Não é viável fazer um commit neste momento pois afuncionalidade não está pronta.
Para auxiliar situações como essa, existe uma quarta área(temporária) no git, chamada stash.
![Page 23: Controle de Versões com Git](https://reader030.fdocument.pub/reader030/viewer/2022020123/558de5cf1a28abf9428b475e/html5/thumbnails/23.jpg)
Stash
Criando um stash anônimo
Listando
Para voltar ao desenvolvimento após corrigir o bugdescrito na situação acima
Removendo stash
git stash
git stash list
git stash apply
git stash clear
![Page 24: Controle de Versões com Git](https://reader030.fdocument.pub/reader030/viewer/2022020123/558de5cf1a28abf9428b475e/html5/thumbnails/24.jpg)
Stash
Criando stash e definindo uma identificação
Outros comandos para stash
git stash save "fazendo algo"
git stash apply stash@[0]//volta para o stash desejadogit stash pop//tira da lista, aplica e apaga o stashgit stash drop stash{0} //retira da lista de stash
![Page 25: Controle de Versões com Git](https://reader030.fdocument.pub/reader030/viewer/2022020123/558de5cf1a28abf9428b475e/html5/thumbnails/25.jpg)
Branch
Objetivo de trabalhar com branches: separarfuncionalidades durante o desenvolvimento.Troca de contexto sem atritoCriando branch chamando "desenvolvimento"
Trocando de master para "desenvolvimento"
Listando
git checkout -b "desenvolvimento"
git checkout desenvolvimento
git branch
![Page 26: Controle de Versões com Git](https://reader030.fdocument.pub/reader030/viewer/2022020123/558de5cf1a28abf9428b475e/html5/thumbnails/26.jpg)
Branch
Visualizando histórico
Unindo alterações feitas em um branch (ex:"desenvolvimento") para o master
Removendo branch
GUI para visualização
Mesclando pequenos commits em um único
git log --graph
git checkout master git merge desenvolvimento
git git branch -d desenvolvimento
gitk --all &
git merge < branch > --squash
![Page 27: Controle de Versões com Git](https://reader030.fdocument.pub/reader030/viewer/2022020123/558de5cf1a28abf9428b475e/html5/thumbnails/27.jpg)
Dica: Evite trabalhar no master. O ideal é
que cada branch tenha umafuncionalidade.
http://git-scm.com/book/en/Git-Branching-Branching-Workflows
![Page 28: Controle de Versões com Git](https://reader030.fdocument.pub/reader030/viewer/2022020123/558de5cf1a28abf9428b475e/html5/thumbnails/28.jpg)
Merge / Rebase
Situação: estou trabalhando em um branch e alguémalterou o masterO que deve ser feito é: manter sempre o branch atualatulizado pelo master.
Se existir um conflito, ou seja, arquivo local é diferentedo arquivo que está no master, o arquivo deve seranalizado e depois de corrigir o conflito:
git rebase master
git rebase --continue
![Page 29: Controle de Versões com Git](https://reader030.fdocument.pub/reader030/viewer/2022020123/558de5cf1a28abf9428b475e/html5/thumbnails/29.jpg)
Merge / Rebase
Se estiver em trabalhando com um servidor remoto,deve ser feito merge, pois o rebase é destruitivo.Com rebase a linha de histório é reta, com merge écriado um desvio.Merge traz os commits e adiciona mais um no final.Rebase junta todos os commits linearmente.
![Page 30: Controle de Versões com Git](https://reader030.fdocument.pub/reader030/viewer/2022020123/558de5cf1a28abf9428b475e/html5/thumbnails/30.jpg)
Merge
Rebase
http://git-scm.com/book/en/Git-Branching-Rebasing
![Page 31: Controle de Versões com Git](https://reader030.fdocument.pub/reader030/viewer/2022020123/558de5cf1a28abf9428b475e/html5/thumbnails/31.jpg)
Respositórios remotos
Clonando um repositório
Mostrando origem
Criando branch local a partir de branch remoto
Exibindo braches locais e remotos
Enviando para repositório remoto
git clone teste/.git teste2
git remotegit remote show origin
git checkout -b desenvolvimento origin/desenvolvimento
git branch -a
git push origin master
![Page 32: Controle de Versões com Git](https://reader030.fdocument.pub/reader030/viewer/2022020123/558de5cf1a28abf9428b475e/html5/thumbnails/32.jpg)
Modelo Centralizado
Cenário: Dois desenvolvedores, cada um com umacópia local e um servidor remoto.Criando repositório no servidor
Adicionando permissão de acesso
Chave ssh no usuário
mkdir teste.git cd teste.git git init --bare
cd ~/.ssh echo "chave rsa do usuario" >> autorized_keys
cat ~/.ssh/id_rsa.pub
![Page 33: Controle de Versões com Git](https://reader030.fdocument.pub/reader030/viewer/2022020123/558de5cf1a28abf9428b475e/html5/thumbnails/33.jpg)
Modelo Centralizado
No usuário, adicionando remote ao repositório local
Trazendo alterações do repositório remoto para umbranch especial
Fech seguido de merge
git remote add origin [email protected]:/home/git/repositorios/teste.git
git fech origin master
git pull
![Page 34: Controle de Versões com Git](https://reader030.fdocument.pub/reader030/viewer/2022020123/558de5cf1a28abf9428b475e/html5/thumbnails/34.jpg)
Modelo Centralizado
Modelo Distribuído
http://git-scm.com/book/en/Distributed-Git-Distributed-Workflows
![Page 35: Controle de Versões com Git](https://reader030.fdocument.pub/reader030/viewer/2022020123/558de5cf1a28abf9428b475e/html5/thumbnails/35.jpg)
Gitweb Interface gráfica para visualização dos repositórios no servidor
remoto.
http://git-scm.com/book/ch4-6.html
![Page 36: Controle de Versões com Git](https://reader030.fdocument.pub/reader030/viewer/2022020123/558de5cf1a28abf9428b475e/html5/thumbnails/36.jpg)
Extras
Tags
Logs
git tag v1.0 git push origin v1.0 git push --tags git -b < branch > v0.8
git log --stash git log --pretty=oneline git log --pretty=format:"[%an %ad] %h - %s" git log --pretty=format:"%h - %s" --graph git log --since=30.minutes git log --since=4.hours --until=2.hours git log --since=4.hours --until=2.hours --before="2013-03-15"
![Page 37: Controle de Versões com Git](https://reader030.fdocument.pub/reader030/viewer/2022020123/558de5cf1a28abf9428b475e/html5/thumbnails/37.jpg)
Considerações Finais
Controle de versões é essencial para organização doprojetoÉ fácil, basta usar frequentementeFacilita contribuição em projetos open source
é a melhor forma de mostrar seu trabalhocomo desenvolvedor, seja para empresas ou pessoasGithub
![Page 38: Controle de Versões com Git](https://reader030.fdocument.pub/reader030/viewer/2022020123/558de5cf1a28abf9428b475e/html5/thumbnails/38.jpg)
Referências
Git SCM - Pro Git BookFabio Akita - Screencast - Começando com GitGit for Computer ScientistsGit Documentation
![Page 39: Controle de Versões com Git](https://reader030.fdocument.pub/reader030/viewer/2022020123/558de5cf1a28abf9428b475e/html5/thumbnails/39.jpg)
Perguntas?
![Page 40: Controle de Versões com Git](https://reader030.fdocument.pub/reader030/viewer/2022020123/558de5cf1a28abf9428b475e/html5/thumbnails/40.jpg)
Obrigado!Github
Google +
Slideshare