svn no desenvolvimento de software

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

Upload: manoel-afonso

Post on 02-Jun-2015

682 views

Category:

Technology


3 download

DESCRIPTION

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

TRANSCRIPT

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!