svn: controle de revisões com subversion - thiago rafael becker

Post on 09-Jun-2015

3.850 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

   

SVN: Controle de revisões com SVN: Controle de revisões com subversionsubversion

Thiago Rafael Beckerthiago.becker@gmail

   

His tór i co

● CollabNet, Inc. (http://www.collab.net), Fev. 2000– SourceCast (software de colaboração)

● Desenvolvedores: Karl Fogel, Jim Blandy, Ben Collins-Sussman

● Auxiliaram: Greg Stein, Brian Benlendorf, Jason Robbins

● “Auto-contido” em Ago. 2001

   

Cont ro le de rev i são

● Conceitos– Repositório (localização central dos dados

versionados)– Revisão (situação do repositório em um

instante do tempo)– Histórico (conjunto de versões)– Módulo (parte de um repositório)

   

Repos i tór io

● Local central aonde são guardados os arquivos do projeto

● Funciona como um sistema de arquivos distribuído

● Mantém histórico de alterações, é possível consultar qualquer momento deste histórico

● Gravação = commit, leitura = checkout

   

Repos i tór io

● No começo, sistemas de arquivos– Problema?

   

Repos i tór io

● Problemas?– Uma vez escrito, não existe maneira de

voltar atrás– Pode ser feito controle manual da revisão,

mas é trabalhoso– Pode ser feito um controle do histórico de

cada revisão, mas também é complicado– Muitas ações antes de gravar um arquivo

desviam a atenção do desenvolvedor

   

Repos i tór io

● Solução: Controle automático de (versionamento)– Controle automático da revisão, do histórico,

possibilidade de consultar um projeto em qualquer momento de seu desenvolvimento

● Solução mais conhecida: CVS

   

CVS

● Concurrent Versions System● Problemas?

– Impossibilidade de renomear arquivos e diretórios

● Eles devem ser removidos e depois readicionados● Perda do histórico com esse método

– Não existe versionamento de diretórios

   

CVS

● Problemas?– O versionamento de arquivos apresenta

problemas● Problema da renomeação de arquivos citada

anteriormente● Dois arquivos com o mesmo nome no mesmo

diretório compartilham o mesmo histórico, mesmo que ambos não tenham relação

● Versionamento por arquivo● Ou seja, perde histórico quando não deve, e o

mantém igualemente quando não deve● Quem poderá nos defender?

   

Subversion!

● Versionamento de arquivos, diretórios, e metadados do repositório

● Operações de cópia copiam o histórico do arquivo original para o novo

● Operações de movimentação levam junto o histórico do arquivo

● Dois arquivos de mesmo nome, no mesmo diretório, tem históricos diferentes

● Versionamento por módulo

   

Subvers ion

● Versionamento por módulo● Commits atômicos● Versionamento por módulo, não por

arquivo● Escolha da camada de transporte● Diferenciação automática de arquivos

binários e texto● Branching e tagging eficientes● Hackability

   

Arqu i tetura

   

Prad igmas de cont ro le de rev i são

● Lock-modify-unlock– Problemas administrativos– Serialização desnecessária– Falsa sensação de segurança

● Copy-modify-merge– Cria cópias pessoais do repositório– Ao executar o commit, deve ser feito uma

mescla das alterações realizadas, e resolver conflitos com outras alterações

   

Revisões

● São números aplicados a um objeto para identificar a versão única do objeto

● CVS– Números de revisão são por arquivo– Um número de revisão não significa nada

para os demais arquivos– Um commit atualiza apenas os números de

revisão dos arquivos que foram alterados

   

Revisões

● SVN– Números de revisão são globais dentro do 

repositório– Identificam o estado do repositório em um dado 

instante– Um commit cria um snapshot do repositório– Não consome mais espaço, pois é feita uma cópia 

simpbólica dos arquivos não alterados

   

Cic lo de Traba lho

● “Checkout” de uma cópia de trabalho● Atualizar uma cópia de trabalho● Fazer alterações● Examinar suas alterações● Mesclar com as alterações dos demais● “Commit” das alterações

   

Cic lo da t raba lho

● “Checkout” de uma cópia de trabalhosvn checkout file:///home/trbecker/UFRGS

● Atualizar uma cópia de trabalhosvn update [­r revisão] [arquivo]

● Saída da atualizaçãoU 'foo' Arquivo foi atualizadoA 'foo' Arquivo foi adicionado ao repositórioD 'foo' Arquivo foi deletado do repositórioR 'foo' Arquivo foi substituídoG 'foo' Arquivo foi mesclado (merged)C 'foo' Arquivo está em conflito com o existente na cópia 

de trabalho

   

Cic lo de t raba lho

● Fazer alterações (por conta do desenvolver)● Examinar suas alterações

svn status

_ L 'foo' Existe um lock do arquivo no diretório .svnM 'foo' O arquivo tem alterações locais_M 'foo' Existe uma modificação nos atributos do arquivo? 'foo' Arquivo não gerenciado! 'foo' O arquivo era gerenciado, mas foi deletadoA + 'foo' Adicionado com informação de onde veioM + 'foo' Adicionado com histórioco e possui histórico 

localD 'foo' Agendado para deleçãoA 'foo' Agendado para adição

   

Cic lo de t raba lho

● Examinar suas alteraçõessvn diff [­r revision:revision] [arquivo]

– Exibe as alterações detalhadas das mudanças feitas

● Reverte todas as alteraçõessvn revert

● Grava os dados novos no repositóriosvn commit

   

Cic lo de t raba lho

● Causadores de conflitos são postos em um arquivo, como em CVS

● Três arquivos começando com tmp são criados, um de cada uma das árvores da mesclagem, tornando possível analisar os arquivos originais, e usar outras ferramentas de mesclagem externas

● SVN não permite que sejam cometidos criadores de conflito, ao contrário do CVS

   

Reso lução de conf l i tos

● Mesclar manualmente os arquivos (inflizmente nem tudo funciona como gostariamos :))

● Copiar um dos arquivos tmp por cima de um do seu arquivo

● Executar svn revert para reverter as alterações anteriores

● Após resolvidos– Execute snv resolve– Delete os arquivos tmp

   

Mensagens de l og

● Ao cometer novas revisões ao svn, é possível adicionar mensagens de log

● Na verdade, é bastante recomendável● Como fazer

– svn commit ­m “mensagem de log”– svn commit ­F arquivo.log– svn commit e escrever o arquivo de log no

editor, quando ele aparecer

   

Branch ing

● Branch: cópia do repositório para edição paralela

● Tags == branches● Dois modos de operação

– No servidor● svn copy url url

– Local● svn copy trunk branches/trbecker

   

Branch ing

● Mesclagem– svn merge – mescla árvores– Mesmos dois modos de operação: servidor ou

localEx: svn merge branches/trbecker trunk

● Resolver conflitos cfme. descrito anteriormente

   

Perguntas?

   

Agradecimentos :)

top related