Escolar Documentos
Profissional Documentos
Cultura Documentos
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
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.
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
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...)
30/04/13
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
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.
30/04/13
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.
30/04/13
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
intentor.com.br/svn-conceitos-boas-praticas-dicas-de-utilizacao/
8/35
30/04/13
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.
30/04/13
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
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