Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What is the reasoning behind the recommended layout for Subversion repositories?

Tags:

svn

Version Control with Subversion recommends the following layout for (single-project) repositories (complemented by this question):

/trunk
/tags
  /rel.1 (approximately)
  ...
/branches
  /rel1fixes

What are the relative merits of this arrangement when compared with a (perhaps) more process-oriented one?:

/development
  /current
  /stable
/qa (maybe)
  ...
/production
  /stable
  /Prod.2
  /Prod.1
/vendor
  /Rel.5.1
  /Rel.5.2

Please note that I'm thinking of in-house deployment, rather than building a product.

Disclaimer: although I'm a Subversion user, I've never had to deploy with it in a real live environment.

like image 762
Brent.Longborough Avatar asked Sep 20 '08 16:09

Brent.Longborough


Video Answer


3 Answers

The main difference between the recommended layout and your proposed layout is that the recommended layout is somewhat self-documenting as to where to commit things, and how it behaves.

For example, in the recommended layout, it's obvious that all new development is committed to trunk, and most branches are made from trunk. Also, it's obvious that you should never commit anything into /tags. Finally, it's safe to assume that branches are truly branches, which may contain changes specific to that particular branch purpose.

With the proposed layout, some of these things are less certain. Is /development/stable branched from /current? What's the relation between /development/stable and /production/stable? Which of these directories are tags, and which ones can I actually check stuff into?

Certainly this behavior can be documented, but by sticking to the accepted layout that everybody uses, you'll have an easier time getting new hires up to speed on how it works.

like image 68
bmdhacks Avatar answered Oct 16 '22 12:10

bmdhacks


I'll try and sum up the answers so far:


Simple

  1. The "classic" layout (trunk/ + branches/ + tags/) has the advantage of growable simplicity
  2. The Trunk is (usually) the main development line
  3. Branches attend to special development needs such as complex subprojects and post-release maintenance
  4. Tags are fixed, immutable marker posts
  5. This classic layout is well-known so your developers get up to speed faster

Expandable

  1. Vendor development of products integrated into your development (perhaps with adaptations) can, if required be handled as a vendor branch (normally one is enough)
  2. The "Process" axis (Eg. Development, Test if done separately, QA if used, and Production) can be handled by appropriate branch or tag conventions (depending on whether any changes are required or permitted outside "Development").
  3. These additional sets of branches can be handled by naming conventions, or by an additional directory level within tags/ or branches/.

See Other Questions

  1. What does branch, tag and trunk really mean?
  2. What is a good repository layout for releases and projects in Subversion?
  3. Do you use the branches-tags-trunk convention?

I have made this a community answer; please feel free to correct or extend any deficiencies, for which I apologise.

like image 9
4 revs Avatar answered Oct 16 '22 12:10

4 revs


You've described the two pretty much standard models for repository organization: dev-test-prod and trunk-branch. Eric Sink does a nice job of describing them in his Source Control HOWTO. One thing to note is that the way most people use trunk-branch is to create a branch for each version as it is released to customers, which then becomes the maintenance branch.

I would tend to prefer trunk-branch since it doesn't require migrating every single change from development to test to production. Only changes that need to be backported to maintance branches or bugfixes that migrate from the maintance branch to the trunk need to be migrated.

However, one circumstance were dev-test-prod might be preferable is in web development, where the concept of versions released to customers doesn't really exist. Prod, in this case, would be whatever's running on the server right now, while code is being worked on in dev and test and constantly migrated into the application, rather than being released in one big chunk.

like image 5
Chris Upchurch Avatar answered Oct 16 '22 10:10

Chris Upchurch