Controle de Versão com GIT Túlio Toffolo – [email protected] http://www.toffolo.com.br
Conteúdo Extra
Algoritmos e Estruturas de Dados
História do GIT
• Linus usa BitKeeper para gerenciar o código de suas versões do Linux
• Um belo dia ocorre um problema com a licença do BitKeeper
• Linus gostava das funcionalidades
• E não aceitava outras ferramentas como CVS e SVN
• 05/04/2005 – Surge a primeira versão do GIT
• 15/06/2005 – Git é usado para no controle de versão do kernel do Linux
Quem está usando GIT?
• Android
• Gnome
• Kernel do Linux
• Qt (toolkit)
• Ruby on Rails
• PostgreSQL
• KDE
• X.Org
• Debian
• Perl
• GCC
• Samba
• phpMyAdmin
e muitos outros
3
Controle de versão centralizada
4
• Nomes utilizados:
• VCS – Version Control System
• SCM – Source Code Management
• Commit
• Update
Controle de versão centralizada
5
Controle de versão centralizada
• Sistemas de controle de versão tradicionais • Trabalham com um banco de dados central
• Clientes possuem apenas a versão mais atual
• Exemplos • CVS
• Subversion (SVN)
• Visual Source Safe
• Desafios • Conflitos no desenvolvimento com muitos usuários
• Comunicação servidor/cliente
• Backup?
Controle de versão distribuída
• Não existe servidor real (apenas por convenção)
• Todo cliente possui o repositório
• O controle de versão funciona mesmo offline
• Fazer backups é trivial
• Outros sistemas de controle de versão distribuídos
• Mercurial
• BitKeeper
• Darcs
• Bazaar
Controle de versão distribuída
8
Controle de versão distribuída
9
Vantagens do GIT
• Consistência • Nenhum repositório deve possui mais data que qualquer outro
• Velocidade • Muito mais rápidos que sistemas de controle de versão
convencionais (estou falando de CVS e Subversion)
• Espaço • Algoritmos de compressão eficientes que analisam “o todo”
• Reduz o tamanho local, assim como as transferências em operações de push/pull
• Simplicidade • Modelo de uso é muito simples
• Open Source
Desvantagens do GIT
• Documentado quase exclusivamente através de páginas geradas via “man”
• Maior massa de dados em operações push/pull do que em commits/updates de versões centralizadas
e… que eu saiba nenhuma outra !
Arquitetura do GIT
• Indíces • Armazenam informação sobre a versão atual e as mudanças
feitas nela
• Banco de Dados de Objetos • Blobs (arquivos)
• Armazenados na pasta .git/objects
• Indexados por um único hash
• Todos os arquivos são armazenados em blobs
• Trees (diretórios)
• Commits
• Cada commit gera um novo objeto
• Informações do commit: hash do pai, nome do autor, data/hora do commit e o hash da estrutura corrente
Instalando o GIT
• Windows:
• msysgit: http://code.google.com/p/msysgit/
• Git Extensions: interface gráfica de fácil uso
• Ubuntu:
• sudo apt-get install git-core gitk
• Mac (com MacPorts instado):
• sudo port install git-core gitk
13
Armazenamento do GIT
• A pasta .git
• Apenas no diretório raiz do projeto
• Contem todos os objetos, commits e configurações do projeto
• .git/config: arquivo com configurações específicas do repositório
• .gitignore
• Arquivo texto que indica os arquivos que devem ser ignorados
• Exemplo: *.exe, *.dll, *.o, ~*
Alguns comandos
• Pegar ou iniciar um repositório
• git init
• git clone
• Commits
• git add
• git commit
• Informações
• git help
• git status
• git diff
• git log
• git show
Usando o GIT
• Iniciando seu repositório:
• git init
• Configurando seus dados:
• git config --global user.name ”Túlio Toffolo”
• git config --global user.email ”[email protected]"
• Adicionando arquivos à lista de commit
• git add arquivo.c
• git add .
16
Usando o GIT
• Fazendo o commit
• git commit –m “Mensagem de commit”
• git commit –a –m “Mensagem de commit”
• Verificando as alterações:
• git status
• git log
• git reflog
• Removendo arquivo do repositorio:
• git rm arquivo.c 17
Usando o GIT
• Desfazendo as alterações desde algum commit
• gitk checkout .
• Movendo para uma versão antiga do repositório:
• git reset
• git reset --force (força a barra e volta sem fazer commit)
• Revertendo para uma versão antiga do repositório:
• git revert
(nao remove nada, apenas aplica um patch)
18
Usando o GIT
• GIT nunca deleta um commit
• Assim, é difícil demais perder dados usando GIT
Ø Muito difícil dar um tiro no pé
• Criando TAGs
• git tag <nome_da_tag>
19
Usando branches
• O sistema de branches é a parte mais interessanto no uso do GIT
• Você sempre está trabalhando em algum BRANCH
• Um BRANCH pode ser local ou remoto
• Visualizando os branches
• git branch
• Criando um branch:
• git branch <nome_do_branch>
20
Merge
• Como funciona o branching?
o--o--o <-- origin \ a--b--c <-- mywork \ x--y--z <-- teste• O que é um merge?
o--o--o--a--b--c--x--y--z
Rebase
• Como funciona o branching?
o--o--o--o--o <-- origin \ a--b--c <-- mywork
• O que é um rebase?
o--o--o--o--o <-- origin \ a--b--c <-- mywork
Merge (exemplo 2)
• Como funciona o branching?
o--o--o--o--o--o <-- origin \ a--b--c <-- mywork
• O que é um rebase?
o--o--o--o--o--o <-- origin \ \ a--b--c--m <-- mywork
Otimizando a base GIT
• git gc • Limpa o repositório e compacta a base
• Utilize de tempos em tempos em projetos grandes!!!
• Aumenta a performance consideravelmente
• git fsck • Confere a base de objetos
• Pode mostrar informações de erros
Usando o GIT remotamente
• Criar uma réplica de um repositório:
• git clone
• Pegar modificações feitas em um repositório
• git fetch (pega as atualizações e coloca em outro branch)
• git pull (pega as atualizações e já faz merge)
• Enviar modificações
• git push nome_remoto
25
Usando o GIT remotamente
• Protocolos
• Pasta no seu computador (!!!)
• SSH
• Rsync
• HTTP
• Protocolo próprio do Git
• Criar apontamento remoto:
• git remote add /temp/repositorio_local/.git
26
Git para Backups
• Exemplo: Um diretório precisa de backup!!!
• Rsync é uma ferramenta adequada?
• Usa espaço em excesso
• Solução: crie um repositório GIT no diretório
• Faça commits regulares
• Faça push para o local do backup
• Mais que backup: backup versionado e usando menos espaço!
Outras ferramentas bacanas do GIT
• bash/zsh completion
• Gitk
• GUI para visualizar os commits
• git instaweb
• Usado para gerar páginas web com o repositório
Top Related