1. Universidade Federal do Pará
III Semana Acadêmica da FACOMP
Centro Acadêmico de Ciência da Computação
Utilizando SVN no Desenvolvimento de Software
Manoel Afonso Filho
manoel.lima@icen.ufpa.br
8 de Novembro de 2013
2. 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
3. Introdução
●
O desenvolvimento de software necessita de
um rastreamento das mudanças feitas.
●
●
●
Quando foi alterado?
●
●
O que foi alterado?
Quem alterou?
Vários desenvolvedores trabalhando ao
mesmo tempo.
Documentação, arquivos de configuração,
código-fonte.
4. 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
6. 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
7. 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/
8. Configuração do Projeto
●
Diretório trunk:
●
●
Diretório tags:
●
●
É onde as principais atividades de desenvolvimento ocorrem.
Geralmente é neste diretório em que fazemos o check-out.
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.
9. 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
10. 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
11. 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
12. 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
13. 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
15. 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
16. 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
17. 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"
18. 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
19. 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>
20. 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>
21. 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 . Projeto inteiro
Arquivos e diretórios
específicos
28. 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
30. 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"
31. 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.
32. 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.
33. 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.
34. 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.
35. 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.