#!/usr/bin/env pinpoint
# default style
[../_images/Sketch27014711.png]
[font=Sans 100px]
[fill]
[center]
[text-align=left]
# presentation starts here
--- [font=Serif 100px] [text-align=center]
GIT + GIT-SVN
---
GIT Básico
---
O "index"
O conceito do "index" é o que mais diferencia o GIT do SVN.
"index" são as alterações que serão mandadas, não os arquivos.
---
git add file.py - Coloca as alterações do arquivo no "index".
(Se o arquivo nunca esteve no "index", vai o arquivo inteiro).
---
git commit - Guarda as alterações como uma revisão.
("git commit -a" adiciona TODAS alterações no "index" e gera um commit.)
git push - Envia as alterações para um servidor (normalmente, primeira
execução é git push origin master, onde origin é um alias
para o servidor).
---
Até aqui, SVN parece mais simples porque para mandar pro servidor é
um passo só (svn commit) vs 3 do GIT (git add, git commit,
git push).
---
git add -p file.py
* Adição parcial de conteúdo no index.
Para aqueles momentos de "fiz duas alterações, de dois issues diferentes".
--- [left] [shading-opacity=1.0]
@@ -485,7 +485,7 @@ class GerenciadorForm(TestCase):
"""
curso = EntidadeCursoCurriculoGraduacao.objects.get(pk=1001)
- ano_periodo = AnoPeriodoGraduacao.objects.get(pk=1)
+ ano_periodo = AnoPeriodoGraduacao.objects.get(pk=1001)
# Populando o field com None.
dados = {'pessoa_fisica': u'5',
Stage this hunk [y,n,q,a,d,/,e,?]?
(Ainda útil para aquela última verificada antes de comitar.)
---
git stash
* "Guarda" tudo que não foi commitado em separado.
* git stash pop reaplica as alterações guardadas.
---
git log
Igual ao svn log, mas não precisa de less.
git log --raw: Mostra inclusive os arquivos alterados.
git log -u: Mostra inclusive o que foi alterado.
---
git bisect
Tenta descobrir qual commit introduziu um bug.
* Mostra as alterações em um ponto da história dos logs.
* "O bug está aqui?"
* Se sim, retorna revisões.
* Se não, avança.
(Percorre as revisões como se fosse uma árvore binária.)
--- [../_images/grinch-smile.jpg]
Podem ser feitos vários commits sem que sejam enviados ao servidor.
"Meu branch pode estar quebrado totalmente e ninguém vai ver!"
---
Parênteses
As ferramentas de code review para GIT são muito melhores que
as dos outros SCVs.
--- [../_images/boycrying.jpg]
Mas eu uso SVN!
--- [../_images/baby-smile.jpg]
GIT-SVN to the rescue!
---
GIT-SVN cria e mantém um repositório GIT usando um servidor SVN.
Alguns comandos mudam.
---
git add continua igual (ainda com -p)
git commit continua igual.
Pelo menos isso...
---
Criar o repositório GIT a partir do SVN:
git svn clone http://blahblahblah.com/blah/blah/branch/blah
---
git svn clone https://ucsvirtual.ucs.br/sesi/svn/yoshi/branches/12266
A yoshi/google/alias/tests.py
A yoshi/google/alias/models.py
A yoshi/google/alias/urls.py
A yoshi/google/alias/forms.py
A yoshi/urls.py
A requirement.txt
W: +empty_dir: yoshi/autenticacao/esqueceu_senha/fixtures
W: +empty_dir: yoshi/autenticacao/login/templates/busca
W: +empty_dir: yoshi/core/busca/templates
W: +empty_dir: yoshi/core/geral/templates/search
W: +empty_dir: yoshi/templates/agenda/busca
r4531 = b3667a084e7d69080e0f1c7235b94dab9cb5a326 (refs/remotes/git-svn)
A yoshi/financeiro/cadastro_beneficio/__init__.py
A yoshi/financeiro/cadastro_beneficio/models.py
A yoshi/financeiro/__init__.py
r4532 = 65ce3a96d11c13d0be24836af3a276561885118c (refs/remotes/git-svn)
M yoshi/settings.py
M yoshi/modulos.py
---
Pro-tip: Isso clona o repositório e todos os commits.
Portanto, não se alarme.
---
git svn rebase = svn up
Na verdade, irá recuperar tudo que foi feito desde a última revisão
e aplicar os commits locais, nessa ordem.
--- [top] [clone2.png]
Visão a partir do clone:
--- [top] [rebase2.png]
Visão depois do rebase:
---
git svn dcommit = svn commit
Faz o "upload" dos commits locais para o servidor.
---
Ok, qual a vantagem no final?
---
* Commits mais granulares.
* Branches locais.
* GIT Flow para um fluxo de trabalho conveniente.
* git stash
* Commit mesmo quando a rede está fora.
* Compatível com qualquer versão do SVN.
--- [../_images/tumblr_m3hn8kf49c1ropetlo1_400.jpg]
Novo workflow:
1. Alterar código.
2. git add alteração.
3. git svn rebase para verificar alterações upstream.
4. git commit.
5. Não satisfeito? Goto 1.
6. Tudo Ok? git svn dcommit
--- [../_images/thats-all-folks.jpg]