37
Utilizando SVN no Desenvolvimento de Software Manoel Afonso Filho [email protected] 8 de Novembro de 2013 Universidade Federal do Pará III Semana Acadêmica da FACOMP Centro Acadêmico de Ciência da Computação

SVN no Desenvolvimento de Software

Embed Size (px)

DESCRIPTION

Slides do minicurso "SVN no Desenvolvimento de Software" ministrado na "III Semana Acadêmica da FACOMP" no dia 8 de novembro de 2013.

Citation preview

Page 1: SVN no Desenvolvimento de Software

Utilizando SVN no Desenvolvimento de Software

Manoel Afonso Filho

[email protected]

8 de Novembro de 2013

Universidade Federal do Pará

III Semana Acadêmica da FACOMP

Centro Acadêmico de Ciência da Computação

Page 2: SVN no Desenvolvimento de Software

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

Page 3: SVN no Desenvolvimento de Software

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.

Page 4: SVN no Desenvolvimento de Software

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

Page 5: SVN no Desenvolvimento de Software

Introdução

● Alguns serviços de hospedagem SVN:● Google Code● Assembla● RiouxSVN

Page 6: SVN no Desenvolvimento de Software

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

Page 7: SVN no Desenvolvimento de Software

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/

Page 8: SVN no Desenvolvimento de Software

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.

Page 9: SVN no Desenvolvimento de Software

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

Page 10: SVN no Desenvolvimento de Software

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

Page 11: SVN no Desenvolvimento de Software

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

Page 12: SVN no Desenvolvimento de Software

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

Page 13: SVN no Desenvolvimento de Software

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

Page 14: SVN no Desenvolvimento de Software

Configuração do Projeto

● Importando para o repositório

$cd desenv/projeto-importar

$svn import -m "Import Inicial" <URL_BASE>/Exemplo/trunk

Page 15: SVN no Desenvolvimento de Software

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

Page 16: SVN no Desenvolvimento de Software

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

Page 17: SVN no Desenvolvimento de Software

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"

Page 18: SVN no Desenvolvimento de Software

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

Page 19: SVN no Desenvolvimento de Software

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>

Page 20: SVN no Desenvolvimento de Software

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>

Page 21: SVN no Desenvolvimento de Software

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

Page 22: SVN no Desenvolvimento de Software

Incorporação no Processo de Desenvolvimento

● Check-out de um projeto

Page 23: SVN no Desenvolvimento de Software

Incorporação no Processo de Desenvolvimento

● Check-out de um projeto

Page 24: SVN no Desenvolvimento de Software

Incorporação no Processo de Desenvolvimento

● Check-out de um projeto

Page 25: SVN no Desenvolvimento de Software

Incorporação no Processo de Desenvolvimento

● Check-out de um projeto

Page 26: SVN no Desenvolvimento de Software

Incorporação no Processo de Desenvolvimento

● Commit

Page 27: SVN no Desenvolvimento de Software

Incorporação no Processo de Desenvolvimento

● Ignorando arquivos e diretórios

Page 28: SVN no Desenvolvimento de Software

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

Page 29: SVN no Desenvolvimento de Software

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".

Page 30: SVN no Desenvolvimento de Software

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"

Page 31: SVN no Desenvolvimento de Software

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.

Page 32: SVN no Desenvolvimento de Software

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.

Page 33: SVN no Desenvolvimento de Software

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.

Page 34: SVN no Desenvolvimento de Software

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.

Page 35: SVN no Desenvolvimento de Software

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.

Page 36: SVN no Desenvolvimento de Software

Leitura Recomendada

● Pragmatic Guide to Subversion. Mike Mason. 2010. Pragmatic Programmers.

Page 37: SVN no Desenvolvimento de Software

OBRIGADO!