diff --git a/git-gitsvn/clone.png b/_images/clone.png similarity index 100% rename from git-gitsvn/clone.png rename to _images/clone.png diff --git a/git-gitsvn/clone2.png b/_images/clone2.png similarity index 100% rename from git-gitsvn/clone2.png rename to _images/clone2.png diff --git a/_images/gitadd.png b/_images/gitadd.png new file mode 100644 index 0000000..308c1e0 Binary files /dev/null and b/_images/gitadd.png differ diff --git a/git-gitsvn/rebase.png b/_images/rebase.png similarity index 100% rename from git-gitsvn/rebase.png rename to _images/rebase.png diff --git a/git-gitsvn/rebase2.png b/_images/rebase2.png similarity index 100% rename from git-gitsvn/rebase2.png rename to _images/rebase2.png diff --git a/git-gitsvn/clone.dia b/git-gitsvn/clone.dia deleted file mode 100644 index 52d903b..0000000 Binary files a/git-gitsvn/clone.dia and /dev/null differ diff --git a/git-gitsvn/git-gitsvn.pin b/git-gitsvn/git-gitsvn.pin deleted file mode 100644 index 0b82f4f..0000000 --- a/git-gitsvn/git-gitsvn.pin +++ /dev/null @@ -1,218 +0,0 @@ -#!/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] - diff --git a/gitsvn.html b/gitsvn.html new file mode 100644 index 0000000..246de42 --- /dev/null +++ b/gitsvn.html @@ -0,0 +1,338 @@ + + + + + + + GIT + GIT-SVN + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+

GIT + GIT-SVN

+
+ +
+

GIT Básico

+
+ +
+

O "index"

+ +

O conceito do "index" é o que mais diferencia o GIT do SVN (e outros SCVs).

+ +

"index" contém as alterações que gerarão uma revisão, não os arquivos. Isso só é + estranho por causa do comando para adicionar alterações no index.

+
+ +
+

git add file.py: Adiciona as alterações do arquivo no "index".

+ +

(Se o arquivo nunca teve uma revisão, o conteúdo inteiro do arquivo é adicionado.)

+
+ +
+

git commit: Transforma o index em uma revisão e guarda no repositório local.

+ +

(git commit -a gera um index com todas as alterações e gera uma revisão).

+ +

git push: Envia as revisões locais e envia para um servidor SSH/HTTPS/GIT.

+
+ +
+

Até aqui, SVN parece melhor por ser mais simples: mandar alterações para o servidor é feito + num único passo (svn commit) enquanto o GIT requer 3 (git add, + git commit, git push).

+
+ +
+

Onde o GIT se sobresai

+
+ +
+

git add -p file.py

+ +

Permite selecionar quais alterações irão para o index.

+ +

(Excelente para aqueles momentos de "fiz duas alterações de dois issues diferentes.")

+
+ +
+

+@@ -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,?]?
+					
+ +

E ainda é útil para aquela última revisada antes de gerar uma revisão.

+
+ +
+

Cores!

+ + +
+ +
+

git stash

+ +
    +
  • Guarda as alterações que não estão no index e deixa separado.
  • +
  • git stash pop reaplica as alterações.
  • +
  • Vários "stashes" podem existir ao mesmo tempo (e podem ser aplicados em qualquer ordem).
  • +
+
+ +
+

git log

+ +
    +
  • Igual ao svn log, mas não precisa de less (e nada de "broken pipe" ao fechar o log).
  • +
  • Cores!
  • +
  • git log --raw: mostra os arquivos alterados dentro da revisão.
  • +
  • git log -u: mostra as alterações dentra da revisão.
  • +
+
+ +
+

git commit --amend

+ +

Permite alterar um commit depois de feito.

+
+ +
+

git bisect

+ +

Percorre os commits em forma de árvore binária, para procura de "onde esse bug foi introduzido?"

+ +
    +
  • Mostra as alterações em um ponto do histórico de revisões.
  • +
  • "O bug está aqui?" +
      +
    • Se sim, volta metade das revisões entre a revisão inicial e a atual.
    • +
    • Se não, avança metade das revisões entre a revisão final e a atual.
    • +
    +
  • +
+
+ +
+

Repositório local

+ +

Como o repositório é local, vários commits podem ser feitos sem serem enviados ao servidor.

+ +
+ + +

"Meu branch tá todo quebrado, mas ninguém vai ver isso!"

+
+
+ +
+

Parênteses

+ +

As ferrametnas de code review para GIT são geralmetne melhores de serem usadas de que + as de outros SCVs.

+
+ +
+

Bem legal, mas...

+ +

Mas eu uso SVN!

+ + +
+ +
+

GIT-SVN to the rescue!

+ + +
+ +
+

GIT-SVN é uma módulo do GIT que cria e mantém um repositório local GIT usando um servidor SVN.

+ +

Alguns comandos mudam.

+ +

(... pelo menos aqueles ligados ao acesso do servidor.)

+
+ +
+
    +
  • git add continua igual (-p também continua).
  • +
  • git commit continua igual.
  • +
  • ... na verdade, todos os comandos mostrados anteriormente não mudam.
  • +
+
+ +
+

Criar o repositório GIT a partir do SVN:

+ +


+					git svn clone http://blahblahblah.com/blah/blah/branch/blah
+					

+
+ +
+


+	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
+					

+ +

É clonado o repositório e todos os commits.

+

Portanto, não se assuste.

+
+ +
+

Baixar as alterações do servidor SVN:

+ +


+					git svn rebase
+					

+ +

Na verdade, busca commits existentes no servidor que não estejam + no repositório local e aplica antes dos commits locais.

+
+ +
+

Árvore de revisões antes do rebase:

+ + +
+ +
+

Árvore de revisões depois do rebase:

+ + +
+ +
+

Subir alterações para o servidor SVN:

+ +


+					git svn dcommit
+					

+
+ +
+

Qual a vantagem de usar GIT ao invés de SVN, então?

+
+ +
+
    +
  • Commits mais granulares.
  • +
  • Branches locais.
  • +
  • Commits mesmo quando a rede está fora.
  • +
  • Compatível com qualquer versão do SVN.
  • +
+
+ +
+

Novo workflow

+ +
    +
  1. Alterar código.
  2. +
  3. git add alterações.
  4. +
  5. git svn rebase para verificar se há alterações upstream.
  6. +
  7. git commit.
  8. +
  9. Não satisfeito? GOTO 1.
  10. +
  11. Tudo Ok? git svn dcommit.
  12. +
+
+ +
+
+
+
+
+ + + + + + + + diff --git a/index.html b/index.html index 9476dde..cf14833 100644 --- a/index.html +++ b/index.html @@ -44,10 +44,16 @@ ul.inline-list li {
PyPoa +
  • ReST
  • + +
  • +
    + GIT-SVN +