Uma das funcionalidades dos systemas de controlo de versões, é a sua capacidade para isolar alterações em linhas de desenvolvimento separadas. Esta linha é conhecida como um ramo. Ramos são com frequência usados para experimentar novas funcionalidades, sem perturbar a linha principal de desenvolvimento com erros de compilador e bugs. Assim que a nova funcionalidade está suficientemente estável, então o ramo de desenvolvimento é integrado de volta para o ramo principal (trunk).
Outra funcionalidade dos sistemas de controlo de vcersões, é a sua capacidade para marcar revisões particulares (e.g. uma versão de entrega), para que possas a qualquer altura recrear uma certa construção ou ambiente. Este processo é conhecido como etiquetagem.
O Subversion não tem comandos especiais para ramificar ou etiquetar, mas em alternativa usa a chamada “cópia barata”. Cópias baratas são semelhantes aos hard links no linux, o que significa que, em vez de efectuar uma cópia completa no repositório, uma ligação interna é criada apontando para a árvore/revisão específica. Como resultado ramos e etiquetas são rápidas a criar e não ocupam praticamente nenhum espaço extra no repositório.
Se importaste o teu projecto com a estrutura de pastas recomendada, criar uma versão ramo ou etiqueta é muito simples:
Selecciona na tua cópia de trabalho a pasta para que queres copiar o ramo ou etiqueta, então selecciona o comando → .
The default destination URL for the new branch will be the source URL on which your working copy is based. You will need to edit that URL to the new path for your branch/tag. So instead of
http://svn.collab.net/repos/ProjectName/trunk
you might now use something like
http://svn.collab.net/repos/ProjectName/tags/Release_1.10
If you can't remember the naming convention you used last time, click the button on the right to open the repository browser so you can view the existing repository structure.
When you specify the target URL, all the folders up to the last one must already exist or you will get an error message. In the above example, the URL http://svn.collab.net/repos/ProjectName/tags/
must exist to create the Release_1.10
tag.
However if you want to create a branch/tag to an URL that has intermediate folders that don't exist yet you can check the option Create intermediate folders
at the bottom of the dialog. If that option is activated, all intermediate folders are automatically created.
Note that this option is disabled by default to avoid typos. For example, if you typed the target URL as http://svn.collab.net/repos/ProjectName/Tags/Release_1.10
instead of http://svn.collab.net/repos/ProjectName/tags/Release_1.10
, you would get an error with the option disabled, but with the option enabled a folder Tags
would be automatically created, and you would end up with a folder Tags
and a folder tags
.
Agora tens de seleccionar a fonte da cópia. Aqui tens três opções:
O novo ramo é copiado directamente, no repositório, a partir da revisão HEAD. Não é necessário transferir nenhuns dados da tua cópia de trabalho e, o ramo é criado muito rapidamente.
O novo ramo é copiado, directamente no repositório, mas podes escolher uma revisão anterior. Isto é útil se te esqueceste de fazer uma etiqueta quando fizeste uma entrega do teu projecto na semana anterior. Se não te lembras do número da revisão, clica no botão à direita para mostrar o registo de versões, e selecciona uma revisão a partir daí. Mais uma vez nenhuns dados são transferidos da tua cópia de trabalho, e o ramo é criado muito rapidamente.
O novo ramo é uma cópia idêntica da tua cópia de trabalho local. Se actualizaste alguns ficheiros numa versão anterior da tua CT, ou se efectuaste alterações locais. Isso é exactamente o que vai na cópia. Naturalmente este tipo de etiquetas complexas pode envolver transferências de dados da tua CT para o repositório, se este não já lá existir.
Se queres que a tua cópia de trabalho seja automaticamente trocada para o ramo recentemente criado, usa a caixa de verificação Trocar a cópia de trabalho para o novo ramo/etiqueta. Mas se o fizeres, tem primeiro a certeza de que a tua cópia de trabalho não contém alterações. Se tiver, essas alterações serão fundidas na CT do ramo, quando fizeres a troca.
If your working copy has other projects included with svn:externals
properties, those externals will be listed at the bottom of the branch/tag dialog. For each external, the target path and the source URL is shown.
If you want to make sure that the new tag always is in a consistent state, check all the externals to have their revisions pinned. If you don't check the externals and those externals point to a HEAD revision which might change in the future, checking out the new tag will check out that HEAD revision of the external and your tag might not compile anymore. So it's always a good idea to set the externals to an explicit revision when creating a tag.
The externals are automatically pinned to either the current HEAD revision or the working copy BASE revision, depending on the source of the branch/tag:
Tabela 4.1. Revisãio Pinado
Copiar Fonte | Revisãio Pinado |
---|---|
A revisão HEAD do repositório | external's repos HEAD revision |
Revisão específica no repositório | external's repos HEAD revision |
Cópia de trabalho | external's WC BASE revision |
If a project that is included as an external has itself included externals, then those will not be tagged! Only externals that are direct children can be tagged.
Prime dentro do repositorio.
para submeter a nova cópia para o repositório. Não te esqueças de introduzir uma mensagem de registo. De notar que a cópia é criadaTer em atenção que, a não ser que troques a tua cópia de trabalho para o ramo recentemente criado, a criação de um ramo ou etiqueta não afecta a tua cópia de trabalho. Mesmo que cries o ramo a partir da tua cópia de trabalho, essas alterações são submetidas para o novo ramo, e não para o trunk, no entanto a tua CT será ainda marcada como modificada em relação ao trunk.
Tu também podes criar um ramo ou etiqueta sem ter uma cópia de trabalho. Para o fazeres, abre o navegador de repositório. Aí podes arrastar pastas para uma nova localização. Terás de manter premida a tecla Ctrl enquanto arrastas de modo a criar uma cópia, de outro modo a pasta é movida, e não copiada.
Podes também arrastar uma pasta com o botão direito do rato. Uma vez que libertes o botão, poderás escolher, a partir do menu de contexto, o que quererás fazer com a pasta a ser movida ou copiada. é claro que para criar um ramo ou etiqueta, tu tens de copiar a pasta e não movê-la.
No entanto, a outra maneira é a partir da caixa de diálogo registo. Podes visualizar a caixa de diálogo registo para o e.g. trunk, selecciona a revisão (a revisao HEAD no topo ou uma revisão anterior), clica com o botão direito e escolhe
....essa não é (realmente) a questão. Enquanto um SVN exportar descarrega tudo a partir de um ramo do repositório para a tua cópia de trabalho,
→ apenas transfere os dados alterados, para a tua cópia de trabalho. Óptimo para a carga na tua rede e bom para a tua paciência. :-)Para poderes trabalhar com o teu ramo ou etiqueta criado de fresco tens várias opções:
→ para criares uma versão exportada de fresco numa pasta vazia. Podes SVN exportar para qualquer localização no teu disco e, podes criar quantas cópias de trabalho, a partir do teu repositório, que desejes.
Trocar a tua cópia de trabalho corrente para a cópia recentemente criada no repositório. Mais uma vez selecciona a pasta de topo do teu projecto e usa
→ a partir do menu de contexto.Na próxima caixa de diálogo, insere o URL do ramo que acabaste de criar. Selecciona a botão de rádio Revisão Head e clica no . A tua cópia de trabalho é trocada para o novo ramo/etiqueta.
O Trocar funciona tal como Actualizar, na forma em que nunca descarta as tuas alterações locais. Quaisquer alterações que tenhas feito na tua cópia de trabalho, que nunca tenhas submetido, serão integradas quando efectuares a troca. Se não quiseres que isto aconteça, deverás submeter as alterações antes da troca ou reverter a tua cópia de trabalho para uma versão já submetida (HEAD tipicamente).
Se queres trabalhar no trunk e no ramo, mas não queres o custo de uma versão SVN exportada de fresco, poderás usar o Explorador do Windows para efectuar a cópia do teu trunk exportado para outra pasta e,
→ essa cópia para o teu novo ramo.Apesar de o próprio Subversion não fazer distinção entre etiquetas e ramos, a maneira como eles tipicamente são usados difere um pouco.
Etiquetas são usadas tipicamente para criar uma fotografia do projecto num patamar particular. Sendo que elas não são normalmente usadas em desenvolvimento - é para isso que existem os ramos, esta é a razão pela qual recomendamos, em primeiro lugar, a estrutura de repositório /trunk /branches /tags
. Trabalhar numa revisão de etiqueta não é uma boa ideia , mas como os teus ficheiros não estão protegidos contra escrita, não existe nada que te impeça de o fazer por engano. No entanto, se tentares submeter para um caminho no repositório que contenha /tags/
, o TortoiseSVN irá-te avisar.
Poderá ser que necessites de efectuar alterações posteriores numa entrega que tenha sido já etiquetada. A maneira correcta para lidar com isto é criar um novo ramo a partir da etiqueta e submeter o mesmo. Efectua as tuas Alterações nesse ramo e então cria uma nova etiqueta a partir deste ramo, e.g. Version_1.0.1
.
Se modificares a cópia de trabalho criada a partir de um ramo, e submeteres, então todas as alterações irão para o novo ramo e não para o trunk. Só as modificações são armazenadas, o resto permanece como cópia barata.