Above is the mock of structure I plan to use for java projects in my organization. What do you guys think about it? Does it look conventional? Also, if you take project1, under tags, you can see, 1.0.1, 1.0.2 and so on - these are release tags, created post release. Now, what kind of tags would exist under Dev branch? When would they be created? Should I create branches under DevBranch for each developer? I am confused.
What do you guys think about it?
Not OK. Usually, branches
does not contain further tags
, trunk
, branches
. Branch
is like trunk
but a parallel development stream. Usually, you create a branch by copy
ing from trunk
or from tag
or from another branch
. Apart from that it's OK.
Does it look conventional?
Yes, it is.
Now, what kind of tags would exist under Dev branch?
By tags you mean names. You can give them a little descriptive names.. like or project1_new_caching_mechanism
or project1_1.1_spot_fixes
-- indicating this is probably copied from release 1.1
tag to fix some of the issues in the release. When you release this branch, you will like to merge these fixes to other parallel running branches and trunk.
When would they be created?
Whenever you find parallel development scenario. Like you wanted to improve the performance by load testing and adding improved code to it without hampering the main development branch. Or for spot fixes. Or for feature replacement.. or for multiple version support.
Should I create branches under DevBranch for each developer?
No. SVN is centralized repository... (unlike Git), the purpose of any SCM is to allow multiple devs to work on it simultaneously... you will be defying the purpose by separating repos for each dev.
I suggest either this:
repo--tags
--branches
--trunk--project1
--project2
--project3
...if you want to tag and branch all projects simultaneously
Or this:
repo--project1--tags
--branches
--trunk
--project2--tags
--branches
--trunk
--project3--tags
--branches
--trunk
..if you want to be able to do tagging and branching separately for each project.
Don't nest tags/branches/trunks, it does not make sense conceptually.
A branch pertains to a development cycle (i.e. myproject_1_1_sprint_1), a tag marks the state of the project at a given point in time (i.e. myproject_1_1_RC03, meaning release candidate 3 of version 1.1). Note that these are purely conceptual differences determined by convention. There is no technical difference in SVN between branches and tags, they are both so called 'cheap copies' of the project's directory structure.
See this excellent article describing a successful branching strategy for GIT, which is also applicable to other versioning systems like SVN.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With