We're a 4-person team and haven't been far from our comfort zone in several years, but we're growing and would like to catch up to the times. I have been tasked with finding the best way to implement Continuous Integration (automated builds, branching for code maintenance and new features, etc). We are looking at switching from SourceSafe 2005 to Subversion to handle our version control. From what I've read, Subversion is a much better choice for doing code promotion, branches, and merging between branches. We will probably use the following products:
- VisualSVN Server
- TortoiseSVN (for integration with Windows Explorer)
- VisualSVN (for integration with Visual Studio 2005)
- SVNVB6 (for integration with Visual Basic 6)
- FinalBuilder
What is the best way to organize the repository for code promotion and feature branching? Here is an example of our current SourceSafe structure:
- root
- Visual Studio 2005 projects
- ProjectName
- Solution file, project files, and code files here
- \bin
- \Release
- Compiled release binaries here
- \Release
- ProjectName
- Visual Basic 6 projects
- ProjectName
- Project files and code files here
- Compiled binaries (.dll, .exe, .ocx) here
- ProjectName
- Documentation
- Documentation files here
- Visual Studio 2005 projects
Should we structure like this?
- root
- branches (each branched from trunk)
- Development.FeatureA
- Development.FeatureB
- Test (Built nightly with FinalBuilder ???)
- Production (Built nightly with FinalBuilder ???)
- Production.BugFixA (Reverse Integrate to Production branch, Test branch, and trunk ???)
- tags
- Development.v1 (tagged after each successful build)
- Development.v2
- Development.v3
- Test.v1
- Test.v2
- Test.v3
- Production.v1
- Production.v2
- Production.v3
- trunk (Development code - Built nightly with FinalBuilder)
- Visual Studion 2005 projects
- ProjectName
- Solution file here
- ProjectName
- Project files and code files here
- ProjectName
- Visual Basic 6 projects
- ProjectName
- Project files and code files here
- ProjectName
- Visual Studion 2005 projects
- branches (each branched from trunk)
Since a large part of our software is still COM (VB6) and needs to be registered (using regsvr32), should the binaries be version-controlled? How should we handle registering/unregistering the components when we need to work on the different branches (possibly with different COM compatibility)?
Are we way off the mark?