Am 11.02.2013 22:08, schrieb Stefan Zumwiese:
I'm planning on setting up a repository which looks like this:

   \common
   \common\folder1
   \common\folder2
   \project1

project1 would include folder1 and folder2 via relative svn:externals
properties. Other projects in the same repository could include the same
and/or other common folders.

Maybe I should give some more background about what we want to achieve: our goal is to have the code of multiple projects/products and all common parts in one repository, without the need to specify explicit revisions for the common parts which are pulled into single projects via svn:externals. For each project/product a branch would be created once it is put into maintenance mode. This means that also the common parts are branched. Each project is therefore free to make changes to common parts, but does not see changes made to common parts by other products (unless explicitly merged).

\trunk\common
\trunk\common\folder1
\trunk\common\folder2
\trunk\project1
\trunk\project2
\branches\project1_v1 <-- complete branch of \trunk
\branches\project2_v3 <-- complete branch of \trunk

To keep the size of a checkout at a reasonable size, only the relevant common parts should be pulled in via externals. One would than check out e.g. \trunk\project1.

When experimenting with this planned repository layout and testing some use cases, I ran into these issues:

When viewing the log of project1, I can see only the direct changes of
project1, not the changes that were made in the relative externals.

Since I'm currently deciding on the repository structure: how good are
chances that something like --include-externals or
--include-local-externals might be added as an option to svn log in the
future?
(Choose a name for the flag as you see fit.)


Also, do you think a similar feature could also be added to svn update,
such that when specifing an explicit revision, relative externals from
the same repository will be updated to this revision number as well
(instead of HEAD)?

So
   svn update --revision 123 --include-local-externals
(Choose a name for the flag as you see fit.)
would update all relative externals which do not explicitly specify a
revision to revision 123 as well, while
   svn update --revision 123
stays the same, e.g. updates the externals to HEAD.

Are there others who might need the same functionality? Do you think these features could make it into SVN?

Are there better ways to accomplish the same result? Instead of using externals, we might as well use a checkout depth of 'empty' for the common folder and explicitly specifying the checkout depth for each required common part only. However, since this would require the use of a batch file or shell script for every fresh checkout, I'm rather looking for a way to use the possibilities built into SVN already.

All comments are highly appreciated.

Stefan

Reply via email to