22
votes

I'm using tortoise svn in Windows.

How can I branch in SVN and have it branch my svn:external folders as well?

4
Here is a blog post which talks about this very problem and the potential work-arounds... thinkinging.com/2008/10/21/…Jesse Webb
Here is an windows command line utility which freezes externals for branching/tagging: svnxf.codeplex.comJesse Webb

4 Answers

24
votes

You should use svn:externals as external references from different repositories. So svn:externals should refer to components, modules, 3rd party tools, etc.

You should not use svn:externals to emulate a "symbolic link"-behaviour by using externals to point into the same repository. You can solve such issues most of the time by modifying your build-structure, or use checkout-scripts and sparse checkout feature.

svn:externals have a lot of problems most of them are difficult to see, track and repair: see an example here

  • commits cannot span over externals(no atomic commits)
  • branches will not branch their externals(as you pointed out)
  • tags will not "freeze" their externals so latter builds may result in different/broken builds
  • merging and reeintegrate merge will not work on externals

If you use externals to point to other repositories, you will most of the time do not have these problems.

11
votes

You'll have to manually create a branch in your external repository and then change your svn:external property to point to the correct branch.

3
votes

When you create a branch within Subversion you are simply creating a cheap copy of the trunk, branch, or tag that you are branching from. This cheap copy will contain all of the same files and properties as the trunk, branch, or tag that you branched from until you begin to modify the properties or files of the new branch.

However, you may be able to modify one of the 'commit' hooks to modify settings automatically once you commit your branch. http://svnbook.red-bean.com/en/1.1/ch05s02.html

Otherwise if you want your externals to be modified on the branch you will need to do so manually.

2
votes

there are relative externals now. though you should know :) im using them right now - in the middle of solving a few troubles i got, but im progressing. i just tagged a project after creating relative externals inside it. for now its wierd - when i check out the branch, it notifies me the externals are from revision "top revision of the trunk", but the externals themselves are the original ones - which is what I want :)