Upload
celestino-gomes
View
3.442
Download
1
Embed Size (px)
DESCRIPTION
Essa foi a apresentação usada no RailsForKids 2009, onde falei um pouco sobre Git
Citation preview
O quê?
• Criado em 2005 por Linus Torvalds
• Necessidade, linux-kernel-devs
• Originalmente, era um engine para VCS
• Fluxo de trabalho distribuído
• Prevenção de corrupção acidental
• Alta performance
2Saturday, September 12, 2009
Características básicas
• Controle de versão distribuido (DVCS)
• Gerenciamento de conteúdo e não arquivos
• Branches como unidade de trabalho
• SHA1 para associação e verificação
• Staging index
• Não é o subversion
3Saturday, September 12, 2009
Diretório .git
• Diretório .git na raíz de cada projeto
• Arquivos de configuração (.git/config)
• Index (.git/index)
• Hooks (.git/hooks)
• Object Database (.git/objects)
• References (.git/refs)
5Saturday, September 12, 2009
Object Database
• Quatro tipos de objetos:
• Blob, Tree, Commit e Tag
• Todos registrados/gravados da mesma maneira
6Saturday, September 12, 2009
Object Database - Loose format
conteudo
“2e6f9b0d5885b6010f9167787445617f553a735f”
header + conteudo
zlib(header + conteudo)
.git/objects/2e/6f9b0d5885b6010f9167787445617f553a735f
7Saturday, September 12, 2009
Object Database - Packed format
.git/objects/2e/6f9b0d5885b6010f9167787445617f553a735f
.git/objects/0b/772ec8eb9ae8952c3c1e56a9ffbe49385cc83a
.git/objects/72/16b02627bc3d6ef57008f7ff67f0f8f13f488e
.git/objects/pack/pack-0bc9a42eb66d7ae36bf44af8ff5a3888e8a02d12.idx
.git/objects/pack/pack-0bc9a42eb66d7ae36bf44af8ff5a3888e8a02d12.pack
git-gc
8Saturday, September 12, 2009Digamos que os objetos listados referenciem o mesmo arquivo, com conjuntos pequenos de diferenças geradas ao longo do tempo. Usar uma ferramenta de manutenção (git-gc, por exemplo) vai compactar os objetos e armazená-los em ‘/pack’.
Object Database - Blob
blob: 2e6f9b
blob: 7034fe
blob: a738fc
active_content.rb
active_content_spec.rb
Rakefile
9Saturday, September 12, 2009
Object Database - Tree
blob: 2e6f9b
blob: 7034fe
blob: a738fc
active_content.rb
active_content_spec.rb
Rakefile
tree: 1fba94
tree: 3ef95a
tree: 34ba74
/lib
/spec
/
10Saturday, September 12, 2009
commit: 8d1ab4
Object Database - Commit
blob: 2e6f9b
blob: 7034fe
blob: a738fc
active_content.rb
active_content_spec.rb
Rakefile
tree: 1fba94
tree: 3ef95a
tree: 34ba74
/lib
/spec
/
11Saturday, September 12, 2009
commit: 8d1ab4
Object Database - Commit
blob: 2e6f9b
blob: 7034fe
blob: a738fc
active_content.rb
active_content_spec.rb
Rakefile
tree: 1fba94
tree: 3ef95a
tree: 34ba74
/lib
/spec
/
commit: 61db26
blob: 41d300
blob: 7034fe
blob: 2a03fb
tree: 1fba94
tree: 3ef95a
tree: 34ba74
12Saturday, September 12, 2009
Object Database - Tag
commit: 8d1ab4
blob: 2e6f9b
blob: 7034fe
blob: a738fc
active_content.rb
active_content_spec.rb
Rakefile
tree: 1fba94
tree: 3ef95a
tree: 34ba74
/lib
/spec
/
tag: 6ee1f2
13Saturday, September 12, 2009
Object Database - Resumo
• Blob é o menor objeto do git
• Tree contém Trees e Blobs
• Commit contém Commits, Trees e Blobs
• Tags contém/apontam um Commit
15Saturday, September 12, 2009
References
commit: 8d1ab4
blob: 2e6f9b
blob: 7034fe
blob: a738fc
active_content.rb
active_content_spec.rb
Rakefile
tree: 1fba94
tree: 3ef95a
tree: 34ba74
/lib
/spec
/
master HEAD.git/refs/heads/master
16Saturday, September 12, 2009Um branch é um ponteiro para um commit. Quando se avança um branch adicionando commits, o que está acontecendo, por baixo dos panos, é mudar o ponteiro do branch para um novo commit.
Staging Index
Commited
Staged
Untrackedlib.rb
lib.rb
lib.rb
$ git add lib.rb
$ git commit -m “lib.rb”
17Saturday, September 12, 2009
Criação de repositórios
$ rails my_blog...$ cd my_blog$ git init$ git add .$ git commit -m “Initial commit”
$ git clone git://github.com/tinogomes/my_blog_app_with_bug.git$ cd my_blog_app_with_bug$ git branchmaster
Criando um novo repositório
Criando um repositório a partir de um outro
19Saturday, September 12, 2009
Trabalhando em um branch remoto
$ cd my_blog_app_with_bug$ git checkout -b refactoring origin/refactoring... após modificações$ echo tmp > .gitignore$ git add .$ git commit -m “outras modificacoes”$ git pull$ git push origin refactoring
20Saturday, September 12, 2009
Adicionando arquivos
$ git add . (cuidado)
$ git add <dir>
$ git add *.rb
$ git add <dir>/<arquivo>
22Saturday, September 12, 2009
Trabalhando com branch local
$ cd my_blog_app_with_bug$ git branch meu_branch_local...$ git checkout master$ git pull . master$ git push origim master
$ git branch -d meu_branch_local
23Saturday, September 12, 2009
Navegando pelo histórico
$ git log --stat
commit 7f5a85113381e8c0d16e4679c4e5a81a4eb000b8Author: Celestino Gomes <[email protected]>Date: Sat Sep 12 02:22:52 2009 -0300
Initial commit
README | 243 ++ Rakefile | 10 + app/controllers/application_controller.rb | 10 + app/helpers/application_helper.rb | 3 + config/boot.rb | 110 +... test/performance/browsing_test.rb | 9 + test/test_helper.rb | 38 + 41 files changed, 8452 insertions(+), 0 deletions(-)
24Saturday, September 12, 2009
Navegando pelo histórico$ git log -p --no-merges
commit 7f5a85113381e8c0d16e4679c4e5a81a4eb000b8Author: Celestino Gomes <[email protected]>Date: Sat Sep 12 02:22:52 2009 -0300
Initial commit
diff --git a/test/performance/browsing_test.rb b/test/performance/browsing_test.rbnew file mode 100644index 0000000..4b60558--- /dev/null+++ b/test/performance/browsing_test.rb@@ -0,0 +1,9 @@+require 'test_helper'+require 'performance_test_help'++# Profiling results for each test method are written to tmp/performance.+class BrowsingTest < ActionController::PerformanceTest+ def test_homepage+ get '/'+ end+end
25Saturday, September 12, 2009
Navegando pelo histórico
$ git log --pretty=oneline
7f5a85113381e8c0d16e4679c4e5a81a4eb000b8 Initial commit
$ git blame app/helpers/application_helper.rb
^7f5a851 (Celestino Gomes 2009-09-12 02:22:52 -0300 1) module ApplicationHelper^7f5a851 (Celestino Gomes 2009-09-12 02:22:52 -0300 2) end
26Saturday, September 12, 2009
Manipulando o índice
$ git reset --soft [<commit>]
$ git reset [<commit>]
$ git reset --hard [<commit>]
$ git commit --amend
Remove do stage index
Limpa os arquivos, inclusive os unstagged
Coloca os arquivos de volta para o stage index
Permite alterar o último commit
27Saturday, September 12, 2009
<commit> - default HEAD
A diferença entre merge e rebase
C1
C2
C3
C6
C4
C5
merge commit
master sprint_branch
$ git checkout master$ git pull . sprint_branch
$ git checkout master$ git fetch$ git merge sprint_branch
ou
29Saturday, September 12, 2009
A diferença entre merge e rebase
C1
C2
C3
C4’ C5’
master
$ git checkout master$ git pull --rebase . sprint_branch
$ git checkout master$ git fetch$ git rebase sprint_branch
ouC4
C5
30Saturday, September 12, 2009
Usando o stash
$ git stash show stash@{0}
$ git stash
$ git stash list
$ git stash apply
$ git stash drop stash@{0}
31Saturday, September 12, 2009
Revertendo commits
$ git revert <commit_hash>
$ git revert -n <commit_hash>
32Saturday, September 12, 2009
-n para deixar a reversão no index
Buscando por bugs
$ git bisect start [<bad> [<good>]]
$ git bisect good | bad [<rev>]
$ git bisect reset
$ git bisect run <cmd | script>
$ git bisect skip [(<rev>|<range>)]
33Saturday, September 12, 20091) Primeiro é necessário identificar pontos (commits) bons e ruins para começar a caça. Usar $ git log2) $ git bisect run my_script - Note that the "run" script (my_script in the above example) should exit with code 0 in case the current source code is good. Exit with a code between 1 and 127 (inclusive), except 125, if the current source code is bad.
Limpando a sujeira do dia-a-dia
$ git clean -d -f
$ git push origin :<branch_remoto>
$ git stash clear
Remover arquivos/diretórios não trackeados
Remover um branch remoto
Limpar todo o stash
34Saturday, September 12, 2009clean para remover arquivos/diretórios não trackeados, push origin :<branch> limpa branches remotos, stash para limpar todo o stash
Referências
• http://git.or.cz/gitwiki/GitDocumentation
• http://www.kernel.org/pub/software/scm/git/docs/
• http://blog.tinogomes.com/2008/05/11/instalando-e-usando-git-no-windows-xp/
• http://github.com
36Saturday, September 12, 2009
Mais sobre mim
• http://blog.tinogomes.com
38Saturday, September 12, 2009