svn: controle de revisões com subversion - thiago rafael becker
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 :)