Por vezes é útil construir uma cópia de trabalho feita a partir de diferentes checkouts. Por exemplo, você poderá querer diferentes arquivos ou sub-diretórios de diferentes locais de um repositório ou talvez, de diferentes repositórios. Se você quiser que todo usuário tenha o mesmo layout, você pode definir as propriedades svn:externals
para incluir o recurso especificado nos locais onde são necessários.
Let's say you check out a working copy of /project1
to D:\dev\project1
. Select the folder D:\dev\project1
, right click and choose → from the context menu. The Properties Dialog comes up. Then go to the Subversion tab. There, you can set properties. Click . In the properties dialog, either double click on the svn:externals
if it already exists, or click on the button and select externals
from the menu. To add a new external, click the and then fill in the required information in the shown dialog.
URLs must be properly escaped or they will not work, e.g. you must replace each space with %20
.
Se você quiser que o caminho local inclua "espaços" ou outro caracter especial, terá que incluí-lo entre 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 terá que necessariamente usar /
(barra inclinada) como delimitador de caminho. Note que este comportamento é inusitado no Subversion 1.6 e não funcionará em versões mais antigas.
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 projeto externo está no mesmo repositório, quaisquer alterações feitas serão incluídas na lista de submissão quando submeter seu projeto 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 usar URLs absolutas nas definições svn:externals
e tiver que realocar sua cópia de trabalho (ou seja, a URL do seu repositório é alterada), então seus "externos" não serão alterados e poderão deixar de funcionar.
Para evitar tais problemas, a versão 1.5 ou superior do cliente Subversion, suporta URLs externas relativas. Quatro diferentes métodos de especificar uma URL relativa são suportados. 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á configurada no trunk.
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
.
Note que a URL é relativa a URL do diretório com a propriedade svn:externals
e não a URL do diretório onde o arquivo externo está armazenado.
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
.
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
.
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.
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.
Caso necessite mais informações sobre como TortoiseSVN lida com "Propriedades", consulte “Configurações do Projeto”.
Para saber mais sobre diferentes métodos de acesso a subprojetos comuns, consulte “Inclua um subprojeto em comum”.
Desde a versão 1.6 do Subversion você pode incluir um único arquivo externo em sua cópia de trabalho usando a mesma sintaxe que usaria para diretórios. Entretanto 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.
A URL para um arquivo externo deverá estar no mesmo repositório que a URL na qual o arquivo externo será incluído; arquivos externos inter-repositórios não são suportados.
Em vários aspectos um arquivo externo comporta-se como qualquer outro arquivo versionado, mas eles não podem ser movidos ou eliminados usando os comandos normais; é obrigatório que a propriedade svn:externals
seja modificada.
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: 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.