controle de versões com git

40
Controle de Versões com Vagner Santana http://vagnersantana.com

Upload: vagner-santana

Post on 27-Jun-2015

516 views

Category:

Technology


2 download

DESCRIPTION

This presentation talks about how to start a project using git. From installation and configuration, through concepts of structure commits, index management, stash, branch, merge, rebase, remote repositories and extra themes.

TRANSCRIPT

Page 1: Controle de Versões com Git

Controle de Versões com   

 Vagner Santana

http://vagnersantana.com

Page 2: Controle de Versões com Git

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

Dica: 

Não se preocupe, o início sempre é difícil!

Page 4: Controle de Versões com Git

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

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

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

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

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

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

Dica: 

Sempre leia as mensagens!

Page 11: Controle de Versões com Git

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

Áreas do Git

Working directory: diretório atual detrabalhoStage area: índice.git: repositório de dados

Page 13: Controle de Versões com Git

Áreas do Git

http://git-scm.com/book/en/Getting-Started-Git-Basics

Page 14: Controle de Versões com Git

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

Dica: 

Sempre crie commits com mensagens descrevendo a alteração

feita no projeto!

Page 16: Controle de Versões com Git

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

Estrutura do commit

http://git-scm.com/book/en/Git-Branching-What-a-Branch-Is

Page 18: Controle de Versões com Git

Gerenciando o índice

http://git-scm.com/book/en/Git-Basics-Recording-Changes-to-the-Repository

Page 19: Controle de Versões com Git

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

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

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

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

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

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

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

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

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

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

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

Merge 

Rebase 

http://git-scm.com/book/en/Git-Branching-Rebasing

Page 31: Controle de Versões com Git

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

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

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

Modelo Centralizado 

Modelo Distribuído 

http://git-scm.com/book/en/Distributed-Git-Distributed-Workflows

Page 35: Controle de Versões com Git

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

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

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

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

Perguntas?