28
Controle de Versão com GIT Túlio Toffolo [email protected] http://www.toffolo.com.br Conteúdo Extra Algoritmos e Estruturas de Dados

Controle de Versão com GIT€¦ · Usando o GIT remotamente • Criar uma réplica de um repositório: • git clone • Pegar modificações feitas em um repositório • git fetch

  • Upload
    others

  • View
    10

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Controle de Versão com GIT€¦ · Usando o GIT remotamente • Criar uma réplica de um repositório: • git clone • Pegar modificações feitas em um repositório • git fetch

Controle de Versão com GIT Túlio Toffolo – [email protected] http://www.toffolo.com.br

Conteúdo Extra

Algoritmos e Estruturas de Dados

Page 2: Controle de Versão com GIT€¦ · Usando o GIT remotamente • Criar uma réplica de um repositório: • git clone • Pegar modificações feitas em um repositório • git fetch

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

Page 3: Controle de Versão com GIT€¦ · Usando o GIT remotamente • Criar uma réplica de um repositório: • git clone • Pegar modificações feitas em um repositório • git fetch

Quem está usando GIT?

•  Android

•  Gnome

•  Google

•  Kernel do Linux

•  Qt (toolkit)

•  Ruby on Rails

•  PostgreSQL

•  KDE

•  X.Org

•  Debian

•  Perl

•  GCC

•  Samba

•  phpMyAdmin

e muitos outros

3

Page 4: Controle de Versão com GIT€¦ · Usando o GIT remotamente • Criar uma réplica de um repositório: • git clone • Pegar modificações feitas em um repositório • git fetch

Controle de versão centralizada

4

•  Nomes utilizados:

•  VCS – Version Control System

•  SCM – Source Code Management

•  Commit

•  Update

Page 5: Controle de Versão com GIT€¦ · Usando o GIT remotamente • Criar uma réplica de um repositório: • git clone • Pegar modificações feitas em um repositório • git fetch

Controle de versão centralizada

5

Page 6: Controle de Versão com GIT€¦ · Usando o GIT remotamente • Criar uma réplica de um repositório: • git clone • Pegar modificações feitas em um repositório • git fetch

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?

Page 7: Controle de Versão com GIT€¦ · Usando o GIT remotamente • Criar uma réplica de um repositório: • git clone • Pegar modificações feitas em um repositório • git fetch

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

Page 8: Controle de Versão com GIT€¦ · Usando o GIT remotamente • Criar uma réplica de um repositório: • git clone • Pegar modificações feitas em um repositório • git fetch

Controle de versão distribuída

8

Page 9: Controle de Versão com GIT€¦ · Usando o GIT remotamente • Criar uma réplica de um repositório: • git clone • Pegar modificações feitas em um repositório • git fetch

Controle de versão distribuída

9

Page 10: Controle de Versão com GIT€¦ · Usando o GIT remotamente • Criar uma réplica de um repositório: • git clone • Pegar modificações feitas em um repositório • git fetch

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

Page 11: Controle de Versão com GIT€¦ · Usando o GIT remotamente • Criar uma réplica de um repositório: • git clone • Pegar modificações feitas em um repositório • git fetch

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 !

Page 12: Controle de Versão com GIT€¦ · Usando o GIT remotamente • Criar uma réplica de um repositório: • git clone • Pegar modificações feitas em um repositório • git fetch

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

Page 13: Controle de Versão com GIT€¦ · Usando o GIT remotamente • Criar uma réplica de um repositório: • git clone • Pegar modificações feitas em um repositório • git fetch

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

Page 14: Controle de Versão com GIT€¦ · Usando o GIT remotamente • Criar uma réplica de um repositório: • git clone • Pegar modificações feitas em um repositório • git fetch

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, ~*

Page 15: Controle de Versão com GIT€¦ · Usando o GIT remotamente • Criar uma réplica de um repositório: • git clone • Pegar modificações feitas em um repositório • git fetch

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

Page 16: Controle de Versão com GIT€¦ · Usando o GIT remotamente • Criar uma réplica de um repositório: • git clone • Pegar modificações feitas em um repositório • git fetch

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

Page 17: Controle de Versão com GIT€¦ · Usando o GIT remotamente • Criar uma réplica de um repositório: • git clone • Pegar modificações feitas em um repositório • git fetch

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

Page 18: Controle de Versão com GIT€¦ · Usando o GIT remotamente • Criar uma réplica de um repositório: • git clone • Pegar modificações feitas em um repositório • git fetch

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

Page 19: Controle de Versão com GIT€¦ · Usando o GIT remotamente • Criar uma réplica de um repositório: • git clone • Pegar modificações feitas em um repositório • git fetch

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

Page 20: Controle de Versão com GIT€¦ · Usando o GIT remotamente • Criar uma réplica de um repositório: • git clone • Pegar modificações feitas em um repositório • git fetch

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

Page 21: Controle de Versão com GIT€¦ · Usando o GIT remotamente • Criar uma réplica de um repositório: • git clone • Pegar modificações feitas em um repositório • git fetch

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

Page 22: Controle de Versão com GIT€¦ · Usando o GIT remotamente • Criar uma réplica de um repositório: • git clone • Pegar modificações feitas em um repositório • git fetch

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

Page 23: Controle de Versão com GIT€¦ · Usando o GIT remotamente • Criar uma réplica de um repositório: • git clone • Pegar modificações feitas em um repositório • git fetch

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

Page 24: Controle de Versão com GIT€¦ · Usando o GIT remotamente • Criar uma réplica de um repositório: • git clone • Pegar modificações feitas em um repositório • git fetch

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

Page 25: Controle de Versão com GIT€¦ · Usando o GIT remotamente • Criar uma réplica de um repositório: • git clone • Pegar modificações feitas em um repositório • git fetch

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

Page 26: Controle de Versão com GIT€¦ · Usando o GIT remotamente • Criar uma réplica de um repositório: • git clone • Pegar modificações feitas em um repositório • git fetch

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

Page 27: Controle de Versão com GIT€¦ · Usando o GIT remotamente • Criar uma réplica de um repositório: • git clone • Pegar modificações feitas em um repositório • git fetch

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!

Page 28: Controle de Versão com GIT€¦ · Usando o GIT remotamente • Criar uma réplica de um repositório: • git clone • Pegar modificações feitas em um repositório • git fetch

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