Você está na página 1de 11

30/04/13

SVN: conceitos, boas prticas e dicas de utilizao - from Tatooine

SVN: conceitos, boas prticas e dicas de utilizao [1]


Em Programao [2] | 11/04/2010 03:20

Introduo

Como grande apreciador e usurio h anos do SVN, no poderia deixar de dedicar um pequeno artigo sobre esta fantstica ferramenta de controle de verso, principalmente pela escassez de materais na Internet discutindo seus conceitos de forma pragmtica. Assim, resolvi aproveitar alguns materiais que eu havia escrito para utilizao pelos times de desenvolvimento nos quais atuo, incrementei alguma coisinha aqui e acol e preparei este estrambolicamente dupper master quase infinito artigo. Para facilitar a leitura, dividi o artigo em 7 partes: Pblico alvo: comentrios sobre a quem se destina a leitura deste artigo; Controle de verso e SVN: o que controle de verso e como o SVN se encaixa nesse paradigma; Termos e conceitos bsicos: conceitos bsicos para entendimento do funcionamento e organizao do SVN; Boas prticas: breve manual de boas prticas na utilizao do SVN; Dicas de utilizao: dicas diversas de utilizao do SVN; Ferramentas de apoio: algumas ferramentas interessantes para tornar o uso do SVN mais prtico. Ao infinito e alm: costumeira lista de links interessantes.

intentor.com.br/svn-conceitos-boas-praticas-dicas-de-utilizacao/

1/35

30/04/13

SVN: conceitos, boas prticas e dicas de utilizao - from Tatooine

Pblico alvo
O cerne deste artigo no a discusso da utilizao do SVN a partir de comandos ou questes tcnicas da ferramenta. Para tal, h documentaes [3], livros [4] e artigos [5] na rede muito completos sobre o tema. O pblico alvo deste artigo so utilizadores do SVN que j tenham familiaridade com suas idiossincrasias [6] e que desejam um melhor entendimento do modelo organizacional da ferramenta e de como estruturar um processo em torno do SVN para tornar mais eficaz o gerenciamento do cdigo-fonte de suas aplicaes.

Controle de verso e SVN


Controle de verso a arte de gerenciar mudanas em informaes. Para programadores, um paradigma obrigatrio a ser seguido para assegurar a sade do cdigo-fonte, ainda mais em grandes equipes atuando cada qual em partes distintas de um projeto.

Voc, desenvolvedor, tambm precisa de uma mquina do tempo para seu cdigo. O Subversion [7], ou simplesmente SVN, uma ferramenta de controle de verso muito poderosa que permite, alm do desenvolvimento colaborativo a partir de um repositrio nico, merge de contedo, armazenamento de logs e gerao de estatsticas diversas. Atuando como a mquina do tempo do desenvolvedor, ferramentas com o SVN permitem retornar o cdigo a um estado anterior, facilitando a anlise implementaes realizadas e a mesclagem de implementaes distintas de perodos diferentes para a criao de uma nica verso. (Embora eu seja fzao e vido partidrio do SVN, tenho flertado nos ltimos
intentor.com.br/svn-conceitos-boas-praticas-dicas-de-utilizacao/ 2/35

30/04/13

SVN: conceitos, boas prticas e dicas de utilizao - from Tatooine

tempos com os timos Mercurial [8] e GIT [9], os quais tm realmente me surpreendido e me feito repensar o uso do meu amado idolatrado salve salve SVN. Todavia, isso fica para outro artigo...)

Termos e conceitos bsicos


Repositrio o local aonde esto contidos todos os arquivos do projeto. armazenado no banco de dados do SVN. Working Copy Literalmente, uma cpia de trabalho local na qual o desenvolvedor atua. criada sempre que feito checkout de algum projeto. Checkout Ato de fazer download de um projeto para a mquina local, de modo que seus arquivos estejam vinculados ao SVN e passveis de manipulao. O projeto para o qual ser feito o checkout deve existir no repositrio. Import Ato de envio dos arquivos de um novo projeto para o repositrio. Aps o import, obrigatoriamente um checkout deve ser realizado para que a working copy seja vinculada ao SVN. Export Ato de obteno de um projeto do repositrio sem vinculao ao SVN. Commit Ato de envio das modificaes realizadas localmente para o servidor SVN. Update Ato de obteno das atualizaes presentes do servidor SVN, atualizando a cpia local Revision Nmero que identifica cada uma das alteraes ou conjunto de alteraes realizadas em um repositrio. Tal nmero obtido a partir de uma sequncia a qual compartilhada por todos os diretrios do repositrio. HEAD a reviso mais recente do repositrio Diretrios especiais Existem no SVN trs diretrios especiais com funes bem definidas:
intentor.com.br/svn-conceitos-boas-praticas-dicas-de-utilizacao/ 3/35

30/04/13

SVN: conceitos, boas prticas e dicas de utilizao - from Tatooine

trunk: armazena a verso funcional mais recente de desenvolvimento. branches: armazena verses de desenvolvimento paralelo oriundas do trunk, porm isoladas deste. Deve ser utilizado quando uma implementao trazer o risco de afetar a integridade do trunk. tags: armazena etiquetas para facilitar a localizao de revises. Cada etiqueta possui um nome nico que a identifica, sendo criada como um diretrio, sempre atravs do trunk. Branch/Tag Refere-se gerao de branches ou tags a partir de um trunk ou gerao de um branch a partir de uma tag ou outro branch. Merge Refere-se mesclagem de revises entre os diretrios especiais. Sempre deve ser realizada com a working copy apontando para o destino do merge. Switch Alterao do repositrio utilizado por uma working copy. realizada uma atualizao ou mesclagem dos arquivos para assegurar que a working copy contenha exatamente o contedo do novo repositrio mais quaisquer alteraes locais. Relocate Realocao do endereo de um repositrio. Apenas atualiza o endereo, sem realizar nenhum tipo de atualizao nos arquivos.

Boas prticas

Toda reviso deve ser comentada para facilitar o entendimento das alteraes realizadas. O cdigo no trunk deve sempre estar pronto para ser compilado e colocado em produo se necessrio. Nesse sentido, uma ferramenta de Integrao Contnua [10], como o CruiseControl [11], deve ser utilizada para a gerao de builds de teste a cada commit e todas as noites ao longo da semana. dever de cada programador assegurar que seus commits no causem a quebra do build. Novamente uma ferramenta de Integrao Contnua [12] pode auxiliar nesta tarefa. As alteraes em um cdigo-fonte devem ser submetidas ao repositrio o mais rpido possvel. Para tal, recomendvel a diviso das implementaes em pequenos pacotes compilveis e funcionais ou, ao menos, que no causem a quebra do build. Quanto mais tempo um arquivo mantm-se na mquina de

intentor.com.br/svn-conceitos-boas-praticas-dicas-de-utilizacao/

4/35

30/04/13

SVN: conceitos, boas prticas e dicas de utilizao - from Tatooine

um desenvolvedor em edio, mais difcil ser sua mesclagem e maior ser o risco de quebra de build. Toda a quebra de build deve ser tratada com mxima prioridade no sentido de sua correo. Mais uma vez uma ferramenta de Integrao Contnua [13] pode auxiliar nesta tarefa. Caso um build esteja quebrado, no se deve submeter alteraes ao repositrio at que o build seja novamente compilvel. Isso assegura que todos os que realizarem updates tero sempre uma verso compilvel e funcional oriunda do repositrio. O projeto no repositrio deve conter quaisquer componentes e ferramentas necessrias para o funcionamento da aplicao na mquina do desenvolvedor. Evitar o envio de alteraes prximo do fim do expediente. Caso haja algum problema com o commit realizado, poder no haver tempo para corrigi-lo naquele dia e o build poder ficar quebrado por um longo perodo. Todo e qualquer backup de verses deve ser mantido no repositrio, preferencialmente como uma tag.

Dicas de utilizao Uso do trunk


O trunk sempre representa a ltima verso de desenvolvimento disponvel. Nesse sentido, aqui que ocorre a integrao do projeto a partir de builds automatizados e aqui que a verso funcional mais recente deve estar presente. do trunk tambm que os branches e tags devem ser gerados (embora branches possam ser gerados de tags e outros branches sem restries tcnicas). A ferramenta de reviso grfica do TortoiseSVN [14] (Revision Graph) permite visualizar os relacionamentos entre as pastas especiais a partir de diagramas.

Fluxo bsico de atividades


O fluxo bsico de atividades no repositrio consiste na utilizao do trunk como ponto principal de checkout para o desenvolvimento. Entretanto, quaisquer tarefas que possam causar grande impacto no trunk devem ser realizadas em um
intentor.com.br/svn-conceitos-boas-praticas-dicas-de-utilizacao/ 5/35

30/04/13

SVN: conceitos, boas prticas e dicas de utilizao - from Tatooine

branch separado, o qual receber as alteraes do trunk ao longo do dia ou ao fim do dia para que este seja mantido atualizado. Tags so utilizadas como backups e marcao de releases diversos do projeto. Segue abaixo explanao da utilizao do fluxo:

Gerao de backup da verso do trunk para marcao de um ponto de restauro rpido antes do incio dos branches a partir da opo Branch/Tag (opcional); Criao de branch para realizao de nova implementao que pode impactar no trunk a partir da opo Branch/Tag; Integrao de alteraes realizadas no trunk ao branch a partir da ferramenta de mesclagem Merge a Range of Revisions; Criao de nova branch para realizao de nova implementao que pode impactar no trunk a partir da opo Branch/Tag; Concluso do primeiro branch criado, ocorrendo a reintegrao deste no trunk a partir da ferramenta de mesclagem Reintegrate a Branch e sua deleo; Atualizao da segunda branch criada com as atualizaes recm realizadas no trunk a partir da ferramenta de mesclagem Merge a Range of Revisions; Concluso da segunda branch criada, ocorrendo a reintegrao desta no trunk a partir da ferramenta de mesclagem Reintegrate a Branch e sua deleo; Gerao de etiqueta de release da verso do trunk a partir da opo Branch/Tag.

Fluxo bsico de atuao em projeto fechado


Quando em atuao em projetos fechados de customizao a um cliente, tem-se comumente uma nica verso da aplicao em produo, alm de outras em ambientes diversos, como por exemplo homologao e testes.
intentor.com.br/svn-conceitos-boas-praticas-dicas-de-utilizacao/ 6/35

30/04/13

SVN: conceitos, boas prticas e dicas de utilizao - from Tatooine

Neste caso, o fluxo bsico de atividades tambm utilizado. Entretanto, a cada release gerado, alm da tag criado um branch que representa a verso criada. Assim, tem-se no trunk a ltima verso de desenvolvimento e, em branches separados, cada uma das verses implantadas em ambientes diversos. Dessa forma, pode-se prestar manuteno s verses presentes em cada um dos ambientes da aplicao de forma simples. Toda vez que uma nova verso de um determinado ambiente gerado, o branch anterior para tal ambiente excludo. Neste fluxo, sempre se espera que todas as revises do trunk anteriores ao release faam parte deste, no havendo seleo de revises na concepo de releases. Segue abaixo explanao da utilizao do fluxo:

Gerao de backup da verso do trunk para marcao de um ponto de restauro rpido antes do incio dos branches a partir da opo Branch/Tag/ (opcional); Criao de branch para realizao de nova implementao que pode impactar no trunk a partir da opo Branch/Tag; Integrao de alteraes realizadas no trunk ao branch a partir da ferramenta de mesclagem Merge a Range of Revisions; Concluso do primeiro branch criada, ocorrendo a reintegrao deste no trunk a partir da ferramenta de mesclagem Reintegrate a Branch e sua deleo; Gerao de etiqueta de release da verso do trunk a partir da opo Branch/Tag; Criao de branch para o release recm gerado a partir da opo Branch/Tag; Mesclagem das alteraes realizadas no branch do release ao trunk a partir da ferramenta de mesclagem Reintegrate a Branch. Tal branch se manter ativo enquanto a verso que o representa estiver em utilizao.
intentor.com.br/svn-conceitos-boas-praticas-dicas-de-utilizacao/ 7/35

30/04/13

SVN: conceitos, boas prticas e dicas de utilizao - from Tatooine

Fluxo de atuao em projeto fechado com mesclagem de revises


A exemplo do Fluxo bsico de atuao em projeto fechado, neste fluxo tambm se considera que h apenas uma nica verso da aplicao em produo, alm de outras em ambientes diversos, como por exemplo homologao e testes. Nesta tcnica, o fluxo bsico de atividades tambm utilizado. Entretanto, a cada release gerado, criado primeiramente um branch baseado em uma tag anterior de ambiente, no qual ocorre mesclagem de revises do trunk, para que somente aps o commit de tal branch seja criada uma nova tag de release que aponte para tal branch (o qual, por sua vez, aponta para o trunk). Assim, tem-se no trunk a ltima verso de desenvolvimento e, em branches separados, cada uma das verses implantadas em ambientes diversos, sendo que tais verses, embora venham do trunk, so geradas sempre a partir de tags de verses ante rios, mantendo dessa forma a seleo de revises realizada. Dessa forma, pode-se prestar manuteno s verses presentes em cada um dos ambientes da aplicao de forma simples, alm da gerao de releases baseados em determinadas revises do trunk. Toda vez que uma nova verso de um determinado ambiente gerado, o branch anterior para tal ambiente excludo. Segue abaixo explanao da utilizao do fluxo:

intentor.com.br/svn-conceitos-boas-praticas-dicas-de-utilizacao/

8/35

30/04/13

SVN: conceitos, boas prticas e dicas de utilizao - from Tatooine

Considerando-se importao inicial do repositrio, deve-se inicialmente criar-se uma tag de release para algum dos ambientes, a qual servir de base para gerao do branch do ambiente com o qual a tag se relaciona a partir da opo Branch/Tag; Criao de branch para a tag do release recm criado a partir da opo Branch/Tag. Tal branch se mantm ativo enquanto a verso que o representa estiver em utilizao. Criao de feature branch para realizao de nova implementao que pode impactar no trunk a partir da opo Branch/Tag. O uso desse tipo de branch deve ser avaliado com cautela. O trunk deve sempre ser a verso mais recente de desenvolvimento; Integrao de alteraes realizadas no trunk ao feature branch a partir da ferramenta de mesclagem Merge a Range of Revisions; Concluso do feature branch criado, ocorrendo a reintegrao deste no trunk a partir da ferramenta de mesclagem Reintegrate a Branch e sua deleo; Reintegrao de correes de bugs realizadas no branch do release atual de algum dos ambientes ao trunk a partir da ferramenta de mesclagem Reintegrate a Branch; Excluso do branch de algum dos ambientes por conta de nova verso a ser criada para tal ambiente; Criao de nova branch para o ambiente a ter a nova verso disponibilizada a partir da tag do ltimo release do ambiente desejado utilizando-se da opo Branch/Tag; Mesclagem de revises do trunk na nova branch de release a partir da ferramenta de mesclagem Merge a Range of Revisions e posterior commit destas alteraes na prpria branch; Gerao de etiqueta de release da verso criada a partir do novo branch utilizando-se da opo Branch/Tag; Mesclagem das alteraes realizadas no branch do release ao trunk a partir da ferramenta de mesclagem Reintegrate a Branch. Tal branch se manter ativo enquanto a verso que o representa estiver em utilizao.

Fluxo de atuao em projeto fechado com mltiplos branches


Tal fluxo uma derivao do Fluxo bsico de atuao em projeto fechado. Diferente daquele, neste todas as alteraes sempre so realizadas em branches que posteriormente so reintegrados ao trunk. Quaisquer verses a serem geradas (produo, homologao, teste, etc.) so criadas a partir de merge de
intentor.com.br/svn-conceitos-boas-praticas-dicas-de-utilizacao/ 9/35

30/04/13

SVN: conceitos, boas prticas e dicas de utilizao - from Tatooine

revises a partir do trunk sobre o prprio trunk ou de branches sobre o trunk, com posterior gerao de novas branches e tag para tal verso. Neste fluxo, o trunk utilizado como a verso mais completa da aplicao, contendo todas as implementaes j realizadas em branches separados. O uso dos branches se d para facilitar a diviso de tarefas e organizao das alteraes, de modo que solicitaes descartadas sejam facilmente ignoradas e no reintegradas ao trunk. Segue abaixo explanao da utilizao do fluxo:

Gerao de backup da verso do trunk para marcao de um ponto de restauro rpido antes do incio dos branches a partir da opo Branch/Tag (opcional); Criao de branches para realizao de novas implementaes a partir da opo Branch/Tag. Como o trunk possui todas as implementaes j realizadas, tais branches devem ser criados com base em revises especficas do trunk que contenham apenas as implementaes desejadas; Integrao de alteraes realizadas no trunk aos branches a partir da ferramenta de mesclagem Merge a Range of Revisions (opcional diferente dos fluxos anteriores, a obteno das ltimas alteraes pode no ser necessria, uma vez que um branch pode referir-se a uma reviso especfica e no necessariamente ltima verso presente no trunk); Concluso dos branches criados, ocorrendo a reintegrao destes no trunk a partir da ferramenta de mesclagem Reintegrate a Branch e posterior deleo; Gerao de release a partir do trunk. Neste fluxo, a gerao de release ocorre mesclando-se revises do trunk em uma working copy de uma reviso especfica (no necessariamente a mais recente) do prprio trunk ou dos branches. Assim, pode-se escolher exatamente quais revises entraro em
intentor.com.br/svn-conceitos-boas-praticas-dicas-de-utilizacao/ 10/35

30/04/13

SVN: conceitos, boas prticas e dicas de utilizao - from Tatooine

uma release, assegurando pleno gerenciamento da montagem de uma verso. A criao do branch feita a partir da opo Branch/Tag; Gerao de etiqueta de release a partir do branch recm gerado atravs da opo Branch/Tag; Mesclagem das alteraes realizadas no branch do release ao trunk a partir da ferramenta de mesclagem Reintegrate a Branch. Tal branch sempre estar disponvel, no sendo excludo do repositrio.

Ferramentas de apoio
Apache Subversion [15]: verso oficial do Subversion. VisualSVN Server [16]: implementao em Windows prtica e fcil de instalar do servidor SVN oficial. Possui ambiente grfico de gerenciamento e permite visualizao do contedo dos repositrios diretamente pelo navegador. TortoiseSVN [17]: a melhor ferramenta grfica para utilizao do SVN em ambiente Windows. RabbitVCS [18]: embora o pessoal de Linux acostumado a digitar centenas de comandos diariamente em suas distribuies, esta ferramenta grfica para utilizao do SVN em Linux inspirada no grande TortoiseSVN torna mais prtico o gerenciamento do projeto diretamente no Nautilus. Commit Monitor [19]: permite o recebimento de alertas a cada commit realizado nos repositrios SVN. CruiseControl [20] e CruiseControl.NET [21]: timas ferramentas de Integrao Contnua. Esta completa entrada [22] na Wikipedia uma excelente referncia de ferramentas de Integrao Contnua.

Ao infinito e alm
Caso tenha alguma dvida, curiosidade, trauma ou angstia sobre o artigo, ou apenas deseja elogi-lo, utilize o espao de comentrios mais abaixo para entrar em contato. Seguem abaixo alguns links interessantes: Subversion Documentation [23], documentao oficial do SVN.
intentor.com.br/svn-conceitos-boas-praticas-dicas-de-utilizacao/ 11/35

Você também pode gostar