Utilizando SVN no Desenvolvimento de Software
Manoel Afonso Filho
8 de Novembro de 2013
Universidade Federal do Pará
III Semana Acadêmica da FACOMP
Centro Acadêmico de Ciência da Computação
Ementa
● Introdução● Configuração do Projeto● Principais Comandos● Incorporação no Processo de Desenvolvimento● Branching, Merging, Tagging● Resolução de Conflitos● Configuração de um Servidor SVN● Outros Softwares de Controle de Versão
Introdução
● O desenvolvimento de software necessita de um rastreamento das mudanças feitas.● O que foi alterado?● Quando foi alterado?● Quem alterou?
● Vários desenvolvedores trabalhando ao mesmo tempo.
● Documentação, arquivos de configuração, código-fonte.
Introdução
● Subversion é um sistema de controle de versões bastante popular.
● É um sistema centralizado.● Um servidor armazena os arquivos e permite o
trabalho colaborativo.● Armazena informações de diretórios e
arquivos.● Multiplataforma
Introdução
● Alguns serviços de hospedagem SVN:● Google Code● Assembla● RiouxSVN
Introdução
● Para sistemas Windows, podemos usar o cliente TortoiseSVN.
http://tortoisesvn.net/downloads.html● Para sistemas Linux, podemos usar a versão
em linha de comando, embora existam vários clientes gráficos.
sudo apt-get install subversion
Configuração do Projeto
● Criação de um repositório local● Linux:
$mkdir -p ~/MinicursoSVN/repos
$svnadmin create ~/MinicursoSVN/repos/
● Windows:
TortoiseSVN > Criar repositório aqui
● A URL do nosso repositório local é:
file:///home/usuario/MinicursoSVN/repos/
Configuração do Projeto
● Diretório trunk:● É onde as principais atividades de desenvolvimento ocorrem.
Geralmente é neste diretório em que fazemos o check-out.● Diretório tags:
● Armazena snapshots do projeto. Exemplo: Qual código pode ir para a release.
● Diretório branches:● São as linhas de desenvolvimento. Exemplo: Criar uma
branch para fazer uma release. A branch foca na estabilidade enquanto que a trunk continua a desenvolver novos recursos.
Configuração do Projeto
● Criação do diretório base para o projeto
$svn mkdir -m "Criação do diretório base." file:///<URL_BASE>/Exemplo
Configuração do Projeto
● Criação do diretório base para o projeto
$svn mkdir -m "Criação do diretório base." file:///<URL_BASE>/Exemplo
$svn mkdir -m "Configuração Inicial" file:///<URL_BASE>/Exemplo/trunk
Configuração do Projeto
● Criação do diretório base para o projeto
$svn mkdir -m "Criação do diretório base." file:///<URL_BASE>/Exemplo
$svn mkdir -m "Configuração Inicial" file:///<URL_BASE>/Exemplo/trunk
$svn mkdir -m "Configuração Inicial" file:///<URL_BASE>/Exemplo/tags
Configuração do Projeto
● Criação do diretório base para o projeto
$svn mkdir -m "Criação do diretório base." file:///<URL_BASE>/Exemplo
$svn mkdir -m "Configuração Inicial" file:///<URL_BASE>/Exemplo/trunk
$svn mkdir -m "Configuração Inicial" file:///<URL_BASE>/Exemplo/tags
$svn mkdir -m "Configuração Inicial" file:///<URL_BASE>/Exemplo/branches
Configuração do Projeto
● Criação do diretório base para o projeto (TortoiseSVN)● TortoiseSVN > Repo-browser● Digitar a URL do repositório● Criar as pastas necessárias para o projeto
Configuração do Projeto
● Importando para o repositório
$cd desenv/projeto-importar
$svn import -m "Import Inicial" <URL_BASE>/Exemplo/trunk
Configuração do Projeto
● Importando para o repositório (TortoiseSVN)● Clique direito no diretório que se quer importar● TortoiseSVN > Importar...● Digitar a <URL_BASE>/Exemplo/trunk● Digitar a mensagem
Principais Comandos
● Check-out● Antes de alterar o código, é preciso obter uma
cópia dos arquivos do repositório.● Esse é o processo de check-out.● Os arquivos ficarão armazenados em um diretório
local chamado de cópia de trabalho.● Em geral, fazemos o check-out do trunk.
$svn checkout <URL_BASE>/projeto/trunk projeto
Principais Comandos
● Commit (Check in)● Após termos feito as mudanças no código, faremos
o commit.● Disponibiliza as nossas mudanças para todos no
repositório.
$svn commit -m "Commit inicial"
Principais Comandos
● Update● Quando há vários desenvolvedores no mesmo projeto,
todos estarão fazendo seus commits no repositório.● O comando update obtém essas mudanças para a
nossa cópia de trabalho.● Durante o update, o SVN informa o que está sendo
alterado na nossa cópia de trabalho.– Arquivos adicionados, removidos e atualizados– Arquivos cujo novo conteúdo foi incorporado à versão local
$svn update
Principais Comandos
● Adicionando arquivos e diretórios● Novos arquivos/diretórios não são enviados
automaticamente para o repositório.● Precisamos adicioná-los ao controle de versão.● Serão enviados ao repositório no próximo commit.
$svn add <arquivos>
Principais Comandos
● Removendo arquivos e diretórios● Similar a adicionar arquivos.● Se quisermos apagar um arquivo/diretório,
primeiro o marcamos para remoção.● No próximo commit a remoção é refletida no
servidor.
$svn delete <arquivos>
Principais Comandos
● Reverter mudanças da cópia de trabalho● Restaura a cópia de trabalho para como ela estava
quando foi realizado o último check-out ou update.● Reverter não obtém as últimas alterações do
repositório; update faz isso.
$svn revert <aquivo>
$svn revert -R <diretório>
$svn revert -R .
Arquivos e diretóriosespecíficos
Projeto inteiro
Incorporação no Processo de Desenvolvimento
● Check-out de um projeto
Incorporação no Processo de Desenvolvimento
● Check-out de um projeto
Incorporação no Processo de Desenvolvimento
● Check-out de um projeto
Incorporação no Processo de Desenvolvimento
● Check-out de um projeto
Incorporação no Processo de Desenvolvimento
● Commit
Incorporação no Processo de Desenvolvimento
● Ignorando arquivos e diretórios
Branching, Merging, Tagging
● Criando uma branch● Os nomes das branchs podem conter qualquer
caractere que um diretório possa ter. Mas, em geral, se usa nomes alfanuméricos.
● Podemos usar uma branch com o nome RB (Release Branch) seguido do número de versão.
$svn copy -m "Criando branch" <URL_BASE>/trunk <URL_BASE>/branches/RB_1.0
Branching, Merging, Tagging
● Merging:● Serve para inserir as correções feitas em alguma
branch no trunk.
$svn merge -c 16 <BASE_URL>/trunk
$svn commit -m "Juntou r16 do trunk".
Branching, Merging, Tagging
● Tagging:● Podemos utilizar as tags para saber quais partes de
código compõem uma release. Por isso, são apenas leitura (read-only).
● Não se deve fazer commits numa tag.
$svn update
$svn copy . <BASE_URL>/tags/REL_1.0.0 -m "Criando tag R1.0.0"
Resolução de Conflitos
● Ocorre quando duas pessoas alteram a mesma parte do arquivo.
● Conflitos devem ser raros pois indicam que mais de uma pessoa está trabalhando na mesma coisa.
● Caso, ao fazer update ocorra um conflito, o SVN nos dá várias opções de resolução.
Resolução de Conflitos
● P: Postergar o conserto do conflito. Os arquivos são salvos com os marcadores de conflitos (sequências de <<< e >>>).
● Df: Exibe um diff de todas as mudanças no arquivo.● E: Edita o arquivo em um editor. Manualmente encontra e
resolve os conflitos.● R: Marca como resolvido, aceitando todas as edições que
fizemos.● Mf: "My File". Ignora a versão do repositório e usa a nossa.● Tf: "Their File". Ignora as nossas mudanças e usa a do
repositório.
Configuração de um Servidor SVN
● Em sistemas Linux, utiliza-se o servidor Apache com os módulos do Subversion.
● Em sistemas Windows há disponível o servidor fornecido pela CollabNet. Disponível em:
http://www.collab.net/downloads/subversion● Também é possível utilizar hospedagem de
terceiros, como Google Code, RiouxSVN, Assembla, etc.● Alguns são gratuitos, outros requerem que o
código-fonte seja aberto, etc.
Outros Softwares de Controle de Versão
● Git:● Funciona localmente, por padrão● Git armazena estado, história e integridade do
código fonte, enquanto que SVN armazena apenas estado.
● Algumas operações são mais velozes no Git do que no SVN.
● Possui uma camada criptográfica para verificar a integridade pelo repositório.
Outros Softwares de Controle de Versão
● GNU Bazaar:● Pode ser usado por um único desenvolvedor
trabalhando em múltiplas branches de conteúdo local, ou por equipes colaborando pela rede.
● Multiplataforma.● Eficiente em grandes quantidades de
armazenamento e velocidade.● Integrado ao Launchpad (forncedor de pacotes
para o Ubuntu).● Extensível por meio de plugins.
Leitura Recomendada
● Pragmatic Guide to Subversion. Mike Mason. 2010. Pragmatic Programmers.
OBRIGADO!
Top Related