Manuals

Itens Externos

Por vezes é útil construir uma cópia de trabalho a partir de vários SVN exportar diferentes. Por exemplo, poderás querer que diferentes ficheiros ou subpastas venham de diferentes localizações do repositório, ou talvez, até de diferentes repositórios. Se queres que cada utilizador tenha a mesma disposição, podes definir as propriedades svn:externals para puxar o recurso especificado para a localização onde será necessário.

Pastas Externas

Digamos que efectuas o checkout da cópia de trabalho do /project1 para D:\dev\project1. Selecciona a pasta D:\dev\project1, clica à direita e a partir do menu de contexto selecciona Menu WindowsPropriedades. Aparecerá a caixa de diálogo Propriedades. Vai então à aba Subversion. Aqui podes colocar propriedades. Clica Properties.... Na caixa de diálogo propriedades, ou efectuas duplo clique na svn:externals se já existir, ou clicas no botão Novo... e seleccionas externos a partir do menu. Para adicionar um novo externo, clica Novo... e então preenche a informação requerida na caixa de diálogo mostrada.

Cuidado

Os URLs têm de ser convenientemente escapados, ou não irão funcionar, e.g. deverás substituir cada espaço com %20.

Se queres que o caminho local inclua espaços ou outro caracter especial, tens rodeá-lo em aspas, ou usar o caracter \ (barra invertida), como um caracter de escape, ao estilo da linha de comandos do linux, precedendo cada caracter especial. É claro que isto também significa que tens de necessáriamente usar / (barra), como delimitador de caminho. De notar que este comportamento é novo no Subversion 1.6 e, não funcionará com clientes mais antigos.

Usa números de revisão explícitos

You should strongly consider using explicit revision numbers in all of your externals definitions, as described above. Doing so means that you get to decide when to pull down a different snapshot of external information, and exactly which snapshot to pull. Besides the common sense aspect of not being surprised by changes to third-party repositories that you might not have any control over, using explicit revision numbers also means that as you backdate your working copy to a previous revision, your externals definitions will also revert to the way they looked in that previous revision, which in turn means that the external working copies will be updated to match the way they looked back when your repository was at that previous revision. For software projects, this could be the difference between a successful and a failed build of an older snapshot of your complex code base.

A caixa de diálogo de edição para propriedades svn:externals permite-te seleccionar as externas e coloca-las explicitamente na revisão HEAD.

Se o projecto externo está no mesmo repositório, qualquer alteração que lá fizeres, será incluida na lista de submissões, quando submeteres o teu projecto principal.

If the external project is in a different repository, any changes you make to the external project will be shown or indicated when you commit the main project, but you have to commit those external changes separately.

Se usares URLs absolutos nas definições svn:externals, e tiveres de transferir a tua cópia de trabalho (i.e., se o URL do teu repositório se alterar), então os teus externos não se alterarão e poderão não mais funcionar.

Para evitar tais problemas, o cliente Subversion, na versão 1.5 ou superior, suporta URLs externos relativos. São suportados quatro diferentes métodos de especificar um URL relativo . Nos exemplos seguintes assume-se que temos dois repositórios: um em http://example.com/svn/repos-1 e outro em http://example.com/svn/repos-2. Temos um SVN exportado do http://example.com/svn/repos-1/project/trunk em C:\Working e a propriedade svn:externals está colocada no trunk.

Relativo à pasta pai

These URLs always begin with the string ../ for example:

../../widgets/foo  common/foo-widget
            

This will extract http://example.com/svn/repos-1/widgets/foo into C:\Working\common\foo-widget.

De notar que, o URL é relativo ao URL da pasta com a propriedade svn:externals e não, à pasta onde o externo está escrito no disco.

Relativo ao repositório raiz

These URLs always begin with the string ^/ for example:

^/widgets/foo  common/foo-widget
            

This will extract http://example.com/svn/repos-1/widgets/foo into C:\Working\common\foo-widget.

You can easily refer to other repositories with the same SVNParentPath (a common directory holding several repositories). For example:

^/../repos-2/hammers/claw  common/claw-hammer
            

This will extract http://example.com/svn/repos-2/hammers/claw into C:\Working\common\claw-hammer.

Relativo ao esquema

URLs beginning with the string // copy only the scheme part of the URL. This is useful when the same hostname must the accessed with different schemes depending upon network location; e.g. clients in the intranet use http:// while external clients use svn+ssh://. For example:

//example.com/svn/repos-1/widgets/foo  common/foo-widget
            

This will extract http://example.com/svn/repos-1/widgets/foo or svn+ssh://example.com/svn/repos-1/widgets/foo depending on which method was used to checkout C:\Working.

Relativo ao nome do servidor

URLs beginning with the string / copy the scheme and the hostname part of the URL, for example:

/svn/repos-1/widgets/foo  common/foo-widget
            

This will extract http://example.com/svn/repos-1/widgets/foo into C:\Working\common\foo-widget. But if you checkout your working copy from another server at svn+ssh://another.mirror.net/svn/repos-1/project1/trunk then the external reference will extract svn+ssh://another.mirror.net/svn/repos-1/widgets/foo.

You can also specify a peg and operative revision for the URL if required. To learn more about peg and operative revisions, please read the corresponding chapter in the Subversion book.

Importante

If you specify the target folder for the external as a subfolder like in the examples above, make sure that all folders in between are versioned as well. So for the examples above, the folder common should be versioned!

While the external will work in most situations properly if folders in between are not versioned, there are some operations that won't work as you expect. And the status overlay icons in explorer will also not show the correct status.

Se necessitas de mais informação em como o TortoiseSVN lida com Propriedades, consulta “Configurações de Projecto”.

Para saberes mais sobre os diferentes métodos de aceder a subprojectos comuns, consulta “Incluir um subprojecto comum”.

Ficheiros Externos

A partir do Subversion 1.6 podes adicionar um ficheiro único externo, à tua cópia de trabalho, usando a mesma sintaxe que as pastas. No entanto, existem algumas restrições.

  • The path to the file external must be a direct child of the folder where you set the svn:externals property.

  • O URL para um ficheiro externo deverá estar no mesmo repositório que o URL em que o ficheiro exteno será inserido; ficheiros externos inter-repositórios não são suportados.

Um ficheiro externo comporta-se apenas como qualquer outro ficheiro versionado em vários aspectos, mas eles não podem ser movidos ou apagados, usando os comandos normais; a propriedade svn:externals terá de ser então modificada.

Criando externos via drag e drop

If you already have a working copy of the files or folders you want to include as externals in another working copy, you can simply add those via drag and drop from the windows explorer.

Simply right drag the file or folder from one working copy to where you want those to be included as externals. A context menu appears when you release the mouse button: SVN Add as externals here if you click on that context menu entry, the svn:externals property is automatically added. All you have to do after that is commit the property changes and update to get those externals properly included in your working copy.

TortoiseSVN homepage