I have multiple projects in SVN. Each of these project sits in it's own trunk and branched for releases.
And there is a shared code which is used in each project. The question is what is the best way to handle the code.
Let me give couple of scenarios and the issues related to them
a) Put the shared code in separate trunk (or repository) and use svn:external.
In the case if we branched some of projects, there will be two problems:
- Any modification of shared code which are made in trunk will be propagated to branch, because svn:external will pick up the changes
- In the case if we will need at some moment go back and build exactly the code which was build for release, it will be hard for us to get exact code, because snv:external will again pick up latest copy of shared code, instead of code at the moment when project was brached.
As I understand there is one work around. As soon as we branch, we can modify svn:external to pick up exact revision of shared code. However, there are again two pitfalls:
- You need remember to do this each time when you branch. (I hate such things, which is easy to forget).
- You can't modify shared code, if you need to do a hotfix for the branched/released project.
b) Another solution is to branch shared code when the project is branched and change external to point to bracnhed copy of shared code.
- Again, one of the problem is manual step, which is easy to forget
- Another problem is merge problems. SVN will skip externals when you will try to merge changes in the project to the trunk. So, again, developer needs to remember to merge shared code manually.
Am I missing anything? Is there any reasonable way to handle this?