Download - Git - Fluxo do Versionamento adotado
Fluxo de Versionamento
William LimaAvanti Agência Digital
Sistema de Controle de
Versão
• Controle de histórico
• Trabalho em equipe
• Marcação e resgate de versões estáveis
• Ramificação do Projeto
Por que Git?• Distribuído
• Um clone “completo” vai para a maquina do desenvolvedor.
• Versionamento local.
• Modelo de Branch.
• Fácil: checkout -b <nomeDoBanchFeature>
• Conveniente: Tente, crie, comite, descarte, volte atrás.
• Pequeno e Rápido.
• Processos Locais.
• Confiabilidade.
• Efetivo.
Benchmarking
Não acho justo, mas também é um ponto a se analisar.
Free e Open Source
• GPLv2
• Free, e melhor…
• Free para sempre.
–Linus Torvalds (criador do Linux e Git)
“O software é como sexo, é melhor quando é
livre.”
Funções Básicas$git init
Transforma o diretório atual em repositório git.
$git init <dir>
Cria um diretório <dir> e transforma em repositório
git.
$git clone <repo.git>
Clona o repositório para maquina local
$git clone <repo.git> <dir>
Clona o repositório para maquina o diretório <dir>
Realiza o commit com a mensagem
$git status
Lista arquivos que não estão na área transitória, e
os arquivos que não estão sendo rastreados.
$git add <arquivo|dir>
adiciona as mudanças do arquivo | diretório
$git reset <arquivo>
Remove as mudanças do arquivo
$git commit -m ‘<msg>'
Realiza o commit com a mensagem
git blame <arquivo>
Exibe quem modificou cada linha do arquivo
<arquivo>, incluindo a data e commit.
$git diff <commit>
Exibe a diferença nos arquivos entre o commit
<commit> e o diretório local
Fluxo GitAgora é para complicar!
Fluxo Git
• Ramificações (Branchs) Principais:
• Master
• Desenvolvimento
• Ramificações de Auxiliares
• Feature
• Release
• Hot-fix
Fluxo Git
main branches
Ramificações Principais
• MASTER: é o código fonte
principal, deve refletir o que
está em produção atualmente.
• DEVELOP: refere-se as
últimas mudanças para o
próximo release.
Fluxo Git
support branches
Ramificações Auxiliares
FEATURE
• Utilizada para novos recursos ou
releases distantes.
• Normalmente saem de um brach
de desenvolvimento.
• Deve ser feito fundido de volta ao
branch de desenvolvimento.
• Convenção de nome do branch:
<desenvolvedor>-<feature>
william-galeria
Fluxo Git
support branches
Ramificações Auxiliares
RELEASE
• Prepara o versionamento para
produção (número da versão,
etc).
• Origem natural: DEVELOP
• Enviadados para MASTER e
DEVELOP
• Convenção de nome do branch:
release-*
release-1.0
Fluxo Git
support branches
Ramificações Auxiliares
HOT-FIX
• Quando é necessário fazer uma
correção imediata. Bug Crítico.
• SEMPRE deve ter sua origem na
versão que está em produção
atualmente.
• Deve enviar suas correções para
MASTER e DEVELOP
• Convenção de nome do branch:
hotfix-*
hotfix-1.2.1
Feature. Como?$ git checkout -b myfeature develop
Switched to a new branch “myfeature”
• >>>> Faço o que tem fazer
$ git checkout develop
Switched to branch 'develop'
$ git merge --no-ff myfeature
Updating ea1b82a..05e9557
(Summary of changes)
$ git branch -d myfeature
Deleted branch myfeature (was 05e9557).
$ git push origin develop
--no-ff
• Esta flag gera mais um commit
no merge.
• Sem ela é impossível
acompanhar a origem das
mudanças (de qual branch
saiu).
• Sem ela você precisa ler todo
o log para acompanhar de
onde cada mudança se
originou.
Release. Como?
$ git checkout -b release-1.2 develop
Switched to a new branch "release-1.2"
Modifique manualmente os arquivos README, RELEASE,
NOTES, ETC.
$ git commit -a -m "Bumped version number to 1.2"
[release-1.2 74d9424] Bumped version number to
1.2
1 files changed, 1 insertions(+), 1 deletions(-)
Fechando o Release. Como?Você precisa passar as modificações para o branch principal, o master, e colocar uma tag nesta versão.
$ git checkout master
Switched to branch 'master'
$ git merge --no-ff release-1.2
Merge made by recursive.
(Summary of changes)
Você precisa também garantir que o branch develop seja atualizado com as informações.
$ git tag -a 1.2
git checkout develop
Switched to branch 'develop'
$ git merge --no-ff release-1.2
Merge made by recursive.
(Summary of changes)
Agora você deve com calma resolver os conflitos de merge.
Por último excluir o branch release.
$ git branch -d release-1.2
Deleted branch release-1.2 (was ff452fe).
Hot-Fix. Como?$ git checkout -b hotfix-1.2.1 master
Switched to a new branch "hotfix-1.2.1"
Modifique manualmente os arquivos README, RELEASE, NOTES, ETC.
$ git commit -a -m "Bumped version number to 1.2.1"
[hotfix-1.2.1 41e61bb] Bumped version number to 1.2.1
1 files changed, 1 insertions(+), 1 deletions(-)
Corrija o bug e faça commit.
$ git commit -m "Fixed severe production problem"
[hotfix-1.2.1 abbe5d6] Fixed severe production problem
5 files changed, 32 insertions(+), 17 deletions(-)
Fechando Hot-Fix. Como?Você precisa passar as modificações para o branch principal, o master, e colocar uma tag nesta versão.
$ git checkout master
Switched to branch 'master'
$ git merge --no-ff hotfix-1.2.1
Merge made by recursive.
(Summary of changes)
$ git tag -a 1.2.1
Você precisa também garantir que o branch develop seja atualizado com as informações.
$ git checkout develop
Switched to branch 'develop'
$ git merge --no-ff hotfix-1.2.1
Merge made by recursive.
(Summary of changes)
Agora você deve com calma resolver os conflitos de merge.
Por último excluir o branch release.
git branch -d hotfix-1.2.1
Deleted branch hotfix-1.2.1 (was abbe5d6).
Referências• http://nvie.com/posts/a-successful-git-branching-model/
• https://www.atlassian.com/git/workflows#!workflow-gitflow
• http://learn.github.com/p/tagging.html
• http://git-scm.com/
• http://rogerdudler.github.io/git-guide/index.pt_BR.html
• http://git-scm.com/book/en/Git-Basics-Tips-and-Tricks
• http://www.javaworld.com/article/2113465/developer-tools-ideit-
smart-20-essential-tips-for-/developer-tools-ide/git-smart-20-
essential-tips-for-git-and-github-users.html