Git - COntrole de
versão distribuído
Instalação
- Instalação
- Ubuntu
- sudo apt-get install git-core
CONFIGURAÇÃO - Basica
Configuração
- Usuário
- git config --global user.name "John Doe"
- git config --global user.email johndoe@example.com
- Colors
- git config --global color.ui auto
- git config -- global color.interactive auto
CONFIGURAção - aliases
- nano $HOME/.gitconfig
[alias] s = status
a = add
aa = !add -A && status
c = commit
cm = commit -m
co = checkout
f = fetch
p = pull
m = merge
CONFIGURAÇÃO - diff
- Sem linha pela metade
se isso nao funcionar
git config --global core.pager 'less -+$LESS -FXR' --replace-all
- Diff por palavra
configuração - DIFF T00l
- Meld
- Install
- sudo apt-get update && sudo apt-get install meld
- Executable
- touch git-diff.sh
- #!/bin/bash meld "$2" "$5" > /dev/null 2>&1
- sudo mv git-diff.sh /usr/local/bin/ sudo chmod +x /usr/local/bin/git-diff.sh
- git config --global diff.external "/usr/local/bin/git-diff.sh"
configuração - LOG
- Resumo do histórico, "git l"
git config --global alias.l "log --graph --pretty=format:'%C(yellow)%h%C(cyan)%d%Creset %s %C(white)- %an, %ar%Creset'"
- Histórico detalhado, "git ll"
git config --global alias.ll "log --stat --abbrev-commit"
Criação de repositórios
- "git init" dentro da pasta do projeto
Conceitos
repositórios
- Repositório Remoto
- Base de código central
- Código dos contribuidores é integrado aqui
- Repositório Local
- git clone
- Cria uma cópia fiel e independente
- Origin: representa o repositório remoto
- Natureza Distribuída - DCVS
- Qualquer clone é independente, hábil de ser clonada
- https://github.com/cinematik/cinematik-core
- git clone https://github.com/cinematik/cinematik-core.git [nome-do-dir]
Mudanças
Processo com vários passos
- Add/Stage (Index)
- Commit
- Push
mudanças - Add/stage
O Git "comita" - persiste mudanças - que foram "staged" - adiciondas ao Index
- git add
- Adiciona mudanças ao Index
- git stage
- mostra o estado do Index
MUDANÇAS - Commit
O Git persiste mudanças que são "comitadas"
- Commits são "snapshots" do estado dos arquivos do projeto
-
git commit -m "Breve explicação das mudanças efetuadas."
MUDANÇAS - Push
- Compartilhe e integre suas mudanças no repositório central
- git push [remote (provavelmente "origin")] [branch]
branches
- Um "branch" representa uma linha independente de desenvolvimento
- Toda vez que voce cria um branch, voce "forka" - copia - a árvore do histórico
Crtl + z no git - desfazendo mudanças
As vezes, nós precisamos remover:
- mudanças normais
- mudanças adicionadas
- mudanças persistidas
dEsFANZENDO MUDANÇAS normais
Mudanças que não foram adicionadas (staged) ainda
- git checkout -- [file]
- reverte para ultima versão staged ou comitada
- git checkout HEAD [file]
- reverte para ultima versão comitada
defanzendo mudanças adicionadas
Mudanças staged
- Desfazer mudanças em arquivo específico
- git reset [commit] [file]
- Desfazer todas mudanças em stage
- git reset
DEFANZENDO MUDANÇAS persistidas
git reset [commit] [file]
-
git reset HEADˆ
- reverte todas mudanças do último commit e coloca no file system
- git reset HEADˆ [file]
- Reverte mudanças do ultimo em um único arquvio e coloca no file system
- --soft
- mudanças revertidas ficam no filesytem, presuposto
- --hard
- mudanças revertidas são descartadas
ignorando arquivos
Git permite que arquivos e diretórios existam dentro da estrutura do repositório, porém sem versionamento
.gitignore
- 1 ignore statement por linha
- Suporte a wildcard *
- Utilize ! (exclamação) para negação
organização
Precisamos organizar o código para:
- Ter uma separação clara entre código estável e código instável
- Gerenciar o código durante workflow de desenvolvimento, representando código em:
- Desenvolvimento
- Testes
- Homologação
- Produção
- Minimizar problemas entre desenvolvedores trabalhando em funcionalidades diferentes e independentes - desenvolvimento modular
Branches
- [feature]: código de uma funcionalidade independente em desenvolvimento
- [fix]: codigo de um bug fix
- dev: integração em desenvolvimento
- qa: código pronto para ser testado
- homolog: código pronto para homologação
- master: código pronto para produção
BRANCHES
- Criar nova branch
- git checkout -b [branch-name]
- Cria um novo branch a partir da branch ATUAL
- Listar branches
- git branch -a
- Trocar para uma branch existente
- git checkout [branch-name]
- Deletar uma branch
- Local
- git branch -D [branch-name]
- Voce não pode deletar a branch atual
- Remota
- git push [remote] :[branch-name]
tags
- Tagueamento de versões específicas
- Bom para releases
- Criar nova tag
- git tag -a [versão] -m "Mensagem sobre esta versão"
- Listar
- Com commit hash
- git show-ref --tags
- Com tag message
-
git tag -l -n1
- Enviar para o remote
- git push --tags
- Envia SOMENTE tags
integração
Como transicionamos codigo entre branches, respeitando nosso workflow?
Merges
- Integração de código de duas branches diferentes é chamado de "merge"
- git merge [branch]
- Integra "branch" na branch atual
- Integrando feature branch (fs/[component]) no dev branch
- git checkout dev
- git merge fs/[component]
conflitos
As vezes, commits nas branches sendo integradas pode entrar em conflito:
- O git não sabe qual como montar um arquivo único com commits integrados:
- "Deu merge capitão!"

resolvendo conflitos
- edite o arquivo retirando conflict tags
- git checkout --theirs
- conserva a versão da branch sendo integrada
- git checkout --ours
- conserva versão da branch atual
- comite as edições
- git add .
- git commit -m "Merged branch1 into branch2, resolving conflict tal"
comparação
Podemos comparar
- Versões de Arquivos
- Branches
Versões de arquivos
git d [file]
git dh [file]
Branches
git diff [branch1] [branch2]
gitflow
agilize organização e integração
- Modelo
http://nvie.com/posts/a-successful-git-branching-model/
- Comandos
http://danielkummer.github.io/git-flow-cheatsheet/
instalação e inicialização
sudo apt-get install git-flow
git flow init
dentro do repositorio
features
Código de uma funcionalidade independente em desenvolvimento
- crie uma feature branch a partir do dev
git flow feature start MYFEATURE
- integre uma feature branch no dev
git flow feature finish MYFEATURE
- publique uma feature para outros colaboradores
git flow feature publish MYFEATURE
- Pegue uma feature publicada
git flow feature pull origin MYFEATURE
hotfixes
Hotfixes são para bug fixes críticos, eles são criados a partir do master
- Crie um novo hotfix
git flow hotfix start VERSION [BASENAME]
opcionalmente voce pode criar a partir de uma tag
- Termine um hotfix
git flow hotfix finish VERSION
-
Voce também pode publicar e pegar hotfixes publicados, do mesmo modo que se faz com features
comandos

Obrigado!
Vinicius Freitas
vinicius@taller.net.br
Git - COntrole de versão distribuído
By Vinicius Freitas
Git - COntrole de versão distribuído
- 1,544