Externe Objecten

Soms is het handig om een werkkopie te hebben, die bestaat uit bestanden die in verschillende aparte archieven zijn opgeslagen. Bijvoorbeeld, je wilt dat bestanden en submappen van verschillende locaties uit het archief worden gehaald, of misschien zelfs vanuit verschillende archieven. Als je wilt dat elke gebruiker dezelfde indeling gebruikt, dan kun je gebruik maken van svn:externals eigenschappen om de benodigde bronnen naar de locaties te halen waar ze nodig zijn.

Externe Mappen

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 Windows MenuProperties from the context menu. The Properties Dialog comes up. Then go to the Subversion tab. There, you can set properties. Click Properties.... In the properties dialog, either double click on the svn:externals if it already exists, or click on the New... button and select externals from the menu. To add a new external, click the New... and then fill in the required information in the shown dialog.

Let op

URLs must be properly escaped or they will not work, e.g. you must replace each space with %20.

Als je in lokale paden spaties en andere speciale tekens wilt gebruiken, dan moet je deze tussen aanhalingstekens plaatsen, of je kunt de \ (schuine streep naar links, ook wel backslash genoemd) gebruiken, zoals deze gebruikt worden Unix voor speciale karakters. Dit houdt ook in dat je de / (schuine streep naar rechts, ook wel forward slash genoemd) moet gebruiken als scheidingsteken voor paden. Merk op dat dit gedrag nieuw is voor Subversion 1.6 en dat dit niet werkt bij oudere versies.

Gebruik Explicite Revisie Nummers

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.

The edit dialog for svn:externals properties allows you to select the externals and automatically set them explicitly to the HEAD revision.

Als het externe project zich in hetzelfde archief bevindt, dan worden de wijzigingen die je daarin aanbrengt meegenomen in de vastleglijst als je het hoofdproject vastlegt.

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.

Als je absolute URL's gebruikt in de svn:externals definities en je moet een keer je werkkopie verplaatsen (oftewel als de URL van je archief verandert), dan zullen de externe verwijzingen niet mee veranderen en dus zullen deze niet meer werken.

Om zulke problemen te voorkomen, ondersteunen de Subversion clients vanaf versie 1.5 relatieve externe URL's. Er zijn vier verschillende methodes voor het definiëren van relatieve URL's. Bij de volgende voorbeelden gaan we er van uit dat we twee archieven hebben: één op http://example.com/svn/repos-1 en de ander op http://example.com/svn/repos-2. We hebben een werkkopie opgehaald van http://example.com/svn/repos-1/project/trunk naar de locatie C:\Working en de svn:externals eigenschap is ingesteld op de basislijn.

Relatief ten opzichte van bovenliggende map

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.

Merk op dat de URL relatief is ten opzicht van de URL van de map met de svn:externals eigenschap, niet ten opzichte van de map waar de externe opgeslagen is op de schijf.

Relatief ten opzichte van de archief hoofdmap

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.

Relatief ten opzichte van de indeling

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.

Relatief ten opzichte van de server hostnaam

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.

Belangrijk

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.

Als je meer informatie wilt hebben over hoe TortoiseSVN omgaat met Eigenschappen, lees dan de paragraaf met de naam “Project Instellingen”.

Lees voor meer informatie over de verschillende methodes voor het benaderen van gemeenschappelijke sub-projecten de paragraaf met de naam “Een veelgebruikt subproject gebruiken”.

Externe Bestanden

Vanaf Subversion 1.6 kun je enkele externe bestanden aan je werkkopie toevoegen, door gebruik te maken van dezelfde syntax als voor mappen. Er zijn wel enkele beperkingen.

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

  • De URL van een extern bestand moet in hetzelfde archief zijn als de URL van het archief waarin het externe bestand wordt opgehaald, externe bestanden tussen verschillende archieven worden niet ondersteund.

Een extern bestand gedraagt zich net zoals elk ander bestand met versiebeheer, maar deze kunnen niet verplaatst of verwijderd worden met normale commando's; de svn:externals eigenschap moet in de plaats daarvan gewijzgd worden.

Creating externals via drag and 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.