gerenciando repositórios de código com git...histórico e diferenciais do git criado por linus...
TRANSCRIPT
![Page 2: Gerenciando Repositórios de Código com GIT...Histórico e Diferenciais do GIT Criado por Linus Torvalds para gerenciar o Linux – Não estava satisfeito com nenhuma alternativa](https://reader034.vdocuments.pub/reader034/viewer/2022052007/601c490ebd29372d6d712124/html5/thumbnails/2.jpg)
Tópicos
● Histórico e diferenciais do GIT● Uso básico, repositórios novos ou clonados● Entendendo o repositório de objetos● Uso avançado com times de desenvolvimento● Referências úteis
![Page 3: Gerenciando Repositórios de Código com GIT...Histórico e Diferenciais do GIT Criado por Linus Torvalds para gerenciar o Linux – Não estava satisfeito com nenhuma alternativa](https://reader034.vdocuments.pub/reader034/viewer/2022052007/601c490ebd29372d6d712124/html5/thumbnails/3.jpg)
Histórico e Diferenciais do GIT
● Criado por Linus Torvalds para gerenciar o Linux– Não estava satisfeito com nenhuma alternativa– O desenvolvimento do kernel é muito distribuído e
assíncrono, não existe um time oficial e central
![Page 4: Gerenciando Repositórios de Código com GIT...Histórico e Diferenciais do GIT Criado por Linus Torvalds para gerenciar o Linux – Não estava satisfeito com nenhuma alternativa](https://reader034.vdocuments.pub/reader034/viewer/2022052007/601c490ebd29372d6d712124/html5/thumbnails/4.jpg)
Histórico e Diferenciais do GIT
● Criado por Linus Torvalds para gerenciar o Linux– Não estava satisfeito com nenhuma alternativa– O desenvolvimento do kernel é muito distribuído e
assíncrono, não existe um time oficial e central– Utiliza algumas poucas idéias básicas e primitivas, porém
muito poderosas– Não força nenhum modelo específico de desenvolvimento– Da base simples e sólida surgiu um grande conjunto de
ferramentas
![Page 5: Gerenciando Repositórios de Código com GIT...Histórico e Diferenciais do GIT Criado por Linus Torvalds para gerenciar o Linux – Não estava satisfeito com nenhuma alternativa](https://reader034.vdocuments.pub/reader034/viewer/2022052007/601c490ebd29372d6d712124/html5/thumbnails/5.jpg)
Histórico e Diferenciais do GIT
● Requisitos– Trabalhar muito rápido com milhares de arquivos
● Geralmente cada mudança afeta apenas alguns arquivos● Nunca comparar todo o repositório para ver o que mudou
![Page 6: Gerenciando Repositórios de Código com GIT...Histórico e Diferenciais do GIT Criado por Linus Torvalds para gerenciar o Linux – Não estava satisfeito com nenhuma alternativa](https://reader034.vdocuments.pub/reader034/viewer/2022052007/601c490ebd29372d6d712124/html5/thumbnails/6.jpg)
Histórico e Diferenciais do GIT
● Requisitos– Trabalhar muito rápido com milhares de arquivos
● Geralmente cada mudança afeta apenas alguns arquivos● Nunca comparar todo o repositório para ver o que mudou
– Permitir vários branches de desenvolvimento● Um branch no GIT não “custa” nada● Branches podem existir em repositórios separados
![Page 7: Gerenciando Repositórios de Código com GIT...Histórico e Diferenciais do GIT Criado por Linus Torvalds para gerenciar o Linux – Não estava satisfeito com nenhuma alternativa](https://reader034.vdocuments.pub/reader034/viewer/2022052007/601c490ebd29372d6d712124/html5/thumbnails/7.jpg)
Histórico e Diferenciais do GIT
● Requisitos– Trabalhar muito rápido com milhares de arquivos
● Geralmente cada mudança afeta apenas alguns arquivos● Nunca comparar todo o repositório para ver o que mudou
– Permitir vários branches de desenvolvimento● Um branch no GIT não “custa” nada● Branches podem existir em repositórios separados
– Operação desconectada● Cada repositório é completo e independente● Colaboração por transferência explícita entre repositórios
![Page 8: Gerenciando Repositórios de Código com GIT...Histórico e Diferenciais do GIT Criado por Linus Torvalds para gerenciar o Linux – Não estava satisfeito com nenhuma alternativa](https://reader034.vdocuments.pub/reader034/viewer/2022052007/601c490ebd29372d6d712124/html5/thumbnails/8.jpg)
Histórico e Diferenciais do GIT
● Diferenciais– Não versiona arquivos e diretórios (hein?)
![Page 9: Gerenciando Repositórios de Código com GIT...Histórico e Diferenciais do GIT Criado por Linus Torvalds para gerenciar o Linux – Não estava satisfeito com nenhuma alternativa](https://reader034.vdocuments.pub/reader034/viewer/2022052007/601c490ebd29372d6d712124/html5/thumbnails/9.jpg)
Histórico e Diferenciais do GIT
● Diferenciais– Não versiona arquivos e diretórios (hein?)– Rastreia a mudança de conteúdos de arquivos e diretórios– Armazena conteúdos de arquivos e diretórios e registra a
mudança entre um conteúdo e outro
![Page 10: Gerenciando Repositórios de Código com GIT...Histórico e Diferenciais do GIT Criado por Linus Torvalds para gerenciar o Linux – Não estava satisfeito com nenhuma alternativa](https://reader034.vdocuments.pub/reader034/viewer/2022052007/601c490ebd29372d6d712124/html5/thumbnails/10.jpg)
Histórico e Diferenciais do GIT
● Diferenciais– Não versiona arquivos e diretórios (hein?)– Rastreia a mudança de conteúdos de arquivos e diretórios– Armazena conteúdos de arquivos e diretórios e registra a
mudança entre um conteúdo e outro– Objetos nunca mudam no repositório– Um commit representa TODA A HISTÓRIA do repositório
até aquele ponto
![Page 11: Gerenciando Repositórios de Código com GIT...Histórico e Diferenciais do GIT Criado por Linus Torvalds para gerenciar o Linux – Não estava satisfeito com nenhuma alternativa](https://reader034.vdocuments.pub/reader034/viewer/2022052007/601c490ebd29372d6d712124/html5/thumbnails/11.jpg)
Uso Básico: repo local (novo)
● mkdir projeto● cd projeto● git init
– Já pode começar a usar● edita, edita, edita, git add● git diff --cached● git status● git commit
– Vamos pro terminal ver isso na prática!
![Page 12: Gerenciando Repositórios de Código com GIT...Histórico e Diferenciais do GIT Criado por Linus Torvalds para gerenciar o Linux – Não estava satisfeito com nenhuma alternativa](https://reader034.vdocuments.pub/reader034/viewer/2022052007/601c490ebd29372d6d712124/html5/thumbnails/12.jpg)
Uso Básico: repo local (existente)
● cd projeto● git init● git add .● git commit -m “Commit inicial”
– Vai tudo pro repositório de objetos– Basta seguir desenvolvendo e commitando
![Page 13: Gerenciando Repositórios de Código com GIT...Histórico e Diferenciais do GIT Criado por Linus Torvalds para gerenciar o Linux – Não estava satisfeito com nenhuma alternativa](https://reader034.vdocuments.pub/reader034/viewer/2022052007/601c490ebd29372d6d712124/html5/thumbnails/13.jpg)
Uso Básico: repo local (clone)
● git clone /caminho/do/repositório.git– Faz uma cópia completa do repositório original– Guarda referência remota de onde veio
● cd repositório● git branch novidades● git checkout novidades● edita, add, commit, repete● Mais tarde o dono do repositório original busca o
branch novidades, ou o desenvolvedor manda o branch pro original.
![Page 14: Gerenciando Repositórios de Código com GIT...Histórico e Diferenciais do GIT Criado por Linus Torvalds para gerenciar o Linux – Não estava satisfeito com nenhuma alternativa](https://reader034.vdocuments.pub/reader034/viewer/2022052007/601c490ebd29372d6d712124/html5/thumbnails/14.jpg)
Uso Básico: repo remoto clonado
● git clone git://foo.bar.com/repos/projeto.git– Faz uma cópia completa do repositório original– Guarda referência remota de onde veio
● cd projeto● git branch novidades● git checkout novidades● edita, add, commit, repete● git checkout master● git pull, rebase, etc
![Page 15: Gerenciando Repositórios de Código com GIT...Histórico e Diferenciais do GIT Criado por Linus Torvalds para gerenciar o Linux – Não estava satisfeito com nenhuma alternativa](https://reader034.vdocuments.pub/reader034/viewer/2022052007/601c490ebd29372d6d712124/html5/thumbnails/15.jpg)
Entendendo o Repo de Objetos
● Quando um arquivo é armazenado no repositório, seu conteúdo é passado por uma função HASH
● O HASH resultante dá o nome “interno” do conteúdo dentro do repositório
![Page 16: Gerenciando Repositórios de Código com GIT...Histórico e Diferenciais do GIT Criado por Linus Torvalds para gerenciar o Linux – Não estava satisfeito com nenhuma alternativa](https://reader034.vdocuments.pub/reader034/viewer/2022052007/601c490ebd29372d6d712124/html5/thumbnails/16.jpg)
Entendendo o Repo de Objetos
● Quando um arquivo é armazenado no repositório, seu conteúdo é passado por uma função HASH
● O HASH resultante dá o nome “interno” do conteúdo dentro do repositório
● Um diretório é um “conteúdo” que mapeia nomes de arquivo para os hashes de seus conteúdos
● Um objeto diretório que represente o diretório raiz do repositório na verdade representa UM ESTADO deste repositório
![Page 17: Gerenciando Repositórios de Código com GIT...Histórico e Diferenciais do GIT Criado por Linus Torvalds para gerenciar o Linux – Não estava satisfeito com nenhuma alternativa](https://reader034.vdocuments.pub/reader034/viewer/2022052007/601c490ebd29372d6d712124/html5/thumbnails/17.jpg)
Entendendo o Repo de Objetos
● Se algum arquivo for modificado, o hash do arquivo muda, portanto o conteúdo do diretório muda, e o hash do diretório muda
● Cada hash de diretório raiz representa um possível estado do repositório
![Page 18: Gerenciando Repositórios de Código com GIT...Histórico e Diferenciais do GIT Criado por Linus Torvalds para gerenciar o Linux – Não estava satisfeito com nenhuma alternativa](https://reader034.vdocuments.pub/reader034/viewer/2022052007/601c490ebd29372d6d712124/html5/thumbnails/18.jpg)
Entendendo o Repo de Objetos
● Se algum arquivo for modificado, o hash do arquivo muda, portanto o conteúdo do diretório muda, e o hash do diretório muda
● Cada hash de diretório raiz representa um possível estado do repositório
● COMMITs registram mudanças entre dois estados do conteúdo e associam a informações como autor, data, mensagem, etc– Um commit contém o hash do commit ANTERIOR e um
hash de diretório ATUAL
![Page 19: Gerenciando Repositórios de Código com GIT...Histórico e Diferenciais do GIT Criado por Linus Torvalds para gerenciar o Linux – Não estava satisfeito com nenhuma alternativa](https://reader034.vdocuments.pub/reader034/viewer/2022052007/601c490ebd29372d6d712124/html5/thumbnails/19.jpg)
Representação Didática
Objetos
![Page 20: Gerenciando Repositórios de Código com GIT...Histórico e Diferenciais do GIT Criado por Linus Torvalds para gerenciar o Linux – Não estava satisfeito com nenhuma alternativa](https://reader034.vdocuments.pub/reader034/viewer/2022052007/601c490ebd29372d6d712124/html5/thumbnails/20.jpg)
Armazenando um Arquivo
Objetos
#include <foo.h>main() {}
C5
Index: teste.c -> C5
![Page 21: Gerenciando Repositórios de Código com GIT...Histórico e Diferenciais do GIT Criado por Linus Torvalds para gerenciar o Linux – Não estava satisfeito com nenhuma alternativa](https://reader034.vdocuments.pub/reader034/viewer/2022052007/601c490ebd29372d6d712124/html5/thumbnails/21.jpg)
Armazenando um Diretório
Objetos
#include <foo.h>main() {}
C5
Index: teste.c -> C5
teste.c -> C5
42
![Page 22: Gerenciando Repositórios de Código com GIT...Histórico e Diferenciais do GIT Criado por Linus Torvalds para gerenciar o Linux – Não estava satisfeito com nenhuma alternativa](https://reader034.vdocuments.pub/reader034/viewer/2022052007/601c490ebd29372d6d712124/html5/thumbnails/22.jpg)
Armazenando um Commit
Objetos
#include <foo.h>main() {}
C5
Index:
teste.c -> C5
42tree 42author Fabio
Commit inicial!
83
HEAD -> 83
![Page 23: Gerenciando Repositórios de Código com GIT...Histórico e Diferenciais do GIT Criado por Linus Torvalds para gerenciar o Linux – Não estava satisfeito com nenhuma alternativa](https://reader034.vdocuments.pub/reader034/viewer/2022052007/601c490ebd29372d6d712124/html5/thumbnails/23.jpg)
Modificando o Arquivo
Objetos
#include <foo.h>main() {}
C5
Index: teste.c -> A2
teste.c -> C5
42tree 42author Fabio
Commit inicial!
83
HEAD -> 83
#include <foo.h>main() {
foo();}
A2
![Page 24: Gerenciando Repositórios de Código com GIT...Histórico e Diferenciais do GIT Criado por Linus Torvalds para gerenciar o Linux – Não estava satisfeito com nenhuma alternativa](https://reader034.vdocuments.pub/reader034/viewer/2022052007/601c490ebd29372d6d712124/html5/thumbnails/24.jpg)
Muda o diretório
Objetos
#include <foo.h>main() {}
C5
Index: teste.c -> A2
teste.c -> C5
42tree 42author Fabio
Commit inicial!
83
HEAD -> 83
#include <foo.h>main() {
foo();}
A2
teste.c -> A2
17
![Page 25: Gerenciando Repositórios de Código com GIT...Histórico e Diferenciais do GIT Criado por Linus Torvalds para gerenciar o Linux – Não estava satisfeito com nenhuma alternativa](https://reader034.vdocuments.pub/reader034/viewer/2022052007/601c490ebd29372d6d712124/html5/thumbnails/25.jpg)
Novo Commit
Objetos
#include <foo.h>main() {}
C5
Index:
teste.c -> C5
42tree 42author Fabio
Commit inicial!
83
HEAD -> F7
#include <foo.h>main() {
foo();}
A2
teste.c -> A2
17parent 83tree 17author Fabio
Adicionei foo()
F7
![Page 26: Gerenciando Repositórios de Código com GIT...Histórico e Diferenciais do GIT Criado por Linus Torvalds para gerenciar o Linux – Não estava satisfeito com nenhuma alternativa](https://reader034.vdocuments.pub/reader034/viewer/2022052007/601c490ebd29372d6d712124/html5/thumbnails/26.jpg)
Histórico de Commits
Objetos
34 12
C3
A2 85
D4
577F
HEADmaster
featurebranch
42
![Page 27: Gerenciando Repositórios de Código com GIT...Histórico e Diferenciais do GIT Criado por Linus Torvalds para gerenciar o Linux – Não estava satisfeito com nenhuma alternativa](https://reader034.vdocuments.pub/reader034/viewer/2022052007/601c490ebd29372d6d712124/html5/thumbnails/27.jpg)
Uso Avançado
● Time pequeno, repositório centralizado– Servidor mantém repositório oficial– Desenvolvedores enviam branches pro repositório central– Integrador faz merge pro master no servidor
![Page 28: Gerenciando Repositórios de Código com GIT...Histórico e Diferenciais do GIT Criado por Linus Torvalds para gerenciar o Linux – Não estava satisfeito com nenhuma alternativa](https://reader034.vdocuments.pub/reader034/viewer/2022052007/601c490ebd29372d6d712124/html5/thumbnails/28.jpg)
Uso Avançado
● Time pequeno, repositório centralizado– Servidor mantém repositório oficial– Desenvolvedores enviam branches pro repositório central– Integrador faz merge pro master no servidor
● Time pequeno, sem repositório centralizado– Desenvolvedores mantém seus repositórios locais– Integrador busca os branches na máquina de cada um
● Talvez patches enviados por email, se for time distribuído● git format-patch registra cada commit desde um ponto original de
forma que possa ser enviado por email facilmente
![Page 29: Gerenciando Repositórios de Código com GIT...Histórico e Diferenciais do GIT Criado por Linus Torvalds para gerenciar o Linux – Não estava satisfeito com nenhuma alternativa](https://reader034.vdocuments.pub/reader034/viewer/2022052007/601c490ebd29372d6d712124/html5/thumbnails/29.jpg)
Uso Avançado
● Time grande, repositório centralizado– Vários níveis de repositórios por nível hierárquico– Desenvolvedores e integradores trabalham no seu nível– Integrador envia master do time pro próximo nível
![Page 30: Gerenciando Repositórios de Código com GIT...Histórico e Diferenciais do GIT Criado por Linus Torvalds para gerenciar o Linux – Não estava satisfeito com nenhuma alternativa](https://reader034.vdocuments.pub/reader034/viewer/2022052007/601c490ebd29372d6d712124/html5/thumbnails/30.jpg)
Uso Avançado
● Time grande, repositório centralizado– Vários níveis de repositórios por nível hierárquico– Desenvolvedores e integradores trabalham no seu nível– Integrador envia master do time pro próximo nível
● Time desconhecido e massivamente distribuído– Desenvolvedores mantém seus repositórios locais,
atualizam repos online ou enviam séries de patches por email para listas ou grupos interessados
– git clone e vai pra ilha deserta● Sites como http://github.com/
![Page 31: Gerenciando Repositórios de Código com GIT...Histórico e Diferenciais do GIT Criado por Linus Torvalds para gerenciar o Linux – Não estava satisfeito com nenhuma alternativa](https://reader034.vdocuments.pub/reader034/viewer/2022052007/601c490ebd29372d6d712124/html5/thumbnails/31.jpg)
Referências Úteis
● GIT Community Book– http://book.git-scm.com/
● Vídeo: Linus Torvalds on GIT– http://www.youtube.com/watch?v=4XpnKHJAok8
● Vídeo: GIT – a Talk by Randal Schwartz– http://www.youtube.com/watch?v=8dhZ9BXQgc4
● Man pages e experimentação● Google, óbvio