#!/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]