histórico de mudanças; • Entender quando e porque foi feita uma alteração; • Consolidação de versões (merging); • Geração de baselines e “ramificações”; • Controlar alterações; • Aplicar alterações Controle de versão Controle de versão
histórico de mudanças; • Entender quando e porque foi realizada uma alteração; • Consolidação de modelos (merging); • Geração de baselines (versões) e “ramificações”; • Controlar alterações; Versionamento de DDL Versionamento de DDL
devem refletir as instruções ALTER ou correspondente. • • • • Por exemplo: Versionamento de DDL Versionamento de DDL CREATE TABLE pessoa( id INTEGER ,nome TEXT ,idade INTEGER ); ALTER TABLE [ ONLY ] name [ * ] action [, ... ]
Repositório central – Operações atômicas no repos central; – Trabalho compartilhado; • Distribuído: – Repositórios descentralizados – Não existe ponto único de falha – Operações de gravação otimizada – Compatível com modelo centralizado RVCS RVCS
ferramenta? “A questão fundamental a ser considerada são os tipos de arquivos que sua equipe trabalha e como você deseja que os membros de sua equipe interajam.” Bryan O'Sullivan “Por uma questão democrática utilizaremos o git” Leonardo Cezar Controle de versão Controle de versão
git diff diff --git a/modelo.sql b/modelo.sql index 8dab7b0..f7c2e68 100644 --- a/modelo.sql +++ b/modelo.sql @@ -1,4 +1,5 @@ CREATE TABLE pessoa( id INTEGER ,nome TEXT + ,idade INTEGER ); Controle de versão Controle de versão
vim modelo.sql CREATE TABLE pessoa( id INTEGER ,nome TEXT ,idade INTEGER ); $ git commit -am 'adicionado atributo idade' $ cat modelo.sql | psql ERROR: relation "pessoa" already exists Controle de versão Controle de versão
diff diff --git a/modelo.sql b/modelo.sql index 8dab7b0..f7c2e68 100644 --- a/modelo.sql +++ b/modelo.sql @@ -1,4 +1,5 @@ CREATE TABLE pessoa( id INTEGER ,nome TEXT + ,idade INTEGER ); $ git diff HEAD^ | psql ERROR: syntax error at or near "diff" LINE 1: diff ^ Controle de versão Controle de versão
Comparação semântica de DDL; • Ferramenta multiplataforma de CA/SL; • Suporte a diversas instruções: – CREATE|ALTER TABLE – CREATE|ALTER VIEW – CREATE FUNCTION – COMMENT – SEQUENCES Controle de versão Controle de versão
podemos!!” • • • No entanto, dependemos de dois arquivos de entrada: $ apgdiff modelo.sql modelo_v2010.sql ALTER TABLE pessoa ADD COLUMN idade INTEGER; $ apgdiff --help Usage: apgdiff [options] <old_dump> <new_dump> Controle de versão Controle de versão
• Git trabalha com branches e podemos visualiza-los através de git-branch: • E mudar de ramo com o comando checkout: $ git branch * master pessoa salario $ git checkout pessoa master * pessoa salario Controle de versão Controle de versão
entre dois branches: … mas ainda assim não resolve $ git diff master pessoa diff --git a/modelo.sql b/modelo.sql index 8dab7b0..f7c2e68 100644 --- a/modelo.sql +++ b/modelo.sql @@ -1,4 +1,5 @@ CREATE TABLE pessoa( id INTEGER ,nome TEXT + ,idade INTEGER ); Controle de versão Controle de versão
Acompanhar logs de gravação (git log) • Organizar o histórico de gravações (git rebase) • Enviar alterações por e-mail (git format-patch) • Compartilhar área de trabalho (git pull) • Trabalhar em modelos remotos (git clone) • Criar unidades de testes (pgTAP)
Momjian Dave Page Peter Eisentraut Miroslav Šulc Linus Torvalds Shawn O Pearce Junio C Hamano Eliane Domingos &t. all Muito obrigado! [email protected]