Managing an SVN Repository
Although there is a SVN guide online, it'll probably be just easier to bring forward our more commonly infrequently used processes (and subsequently, easily forgotten). And while we're at it, discuss our conventions.
Tagging and Branching
Tags are not modified while branches can be modified as a working copy. The purpose of tags is to record a static snapshot of a point of code.
Release Procedure
- Branch application and all externals (even if no modification) from their trunks the morning of the release day
- Change external paths in application branch to point to their branches
- Tag from branch once it's confirmed there are no critical bugs in the branch
- Tag all externals
- Change external paths in branch to point to their tags
- Tag application from branch
If modifications are desired to the release before the next release cycle, commits may be merged directly into the release branch and then a new tag is made once the new version is ready to be released.
Creating a Tag or Branch
Branch:
$ svn copy http://domain.tdl/path/to/repo/trunk http://domain.tdl/path/to/repo/branches/[name] -m "[Branch Message]"
# Tag
$ svn copy http://domain.tdl/path/to/repo/branches/[name] http://domain.tdl/path/to/repo/tags/[name] -m "[Tag Message]"
Naming Conventions
Branch: [product]-M.m
Tag: [product]-M.m.r
* [product] is currently the nickname of the website
* M is the major version, usually if there is a major modification to the application
* m is minor version, usually increased one for each typical release cycle
* r is very minor release upgrade, only if there is a released modification made before our regular release cycle
The live server should only be referencing tags, not trunk, branches or any other "working versions." You can then switch from one tag to another.
$ svn switch http://domain.tdl/path/to/repo/tags/[name] .
Changing Externals
Release versions of applications should point to release versions of our externals. After making branches, you'll need to change the plugins folder properties.
$ svn propedit svn:externals .
# change URL of externals to their respective branches. Add -r [num] before the URL to refer to a specific revision number.
$ svn commit -m "Pointing externals to their [release] branch"
Troubleshooting
svn: None of the environment variables SVN_EDITOR, VISUAL or EDITOR is set, and no 'editor-cmd' run-time configuration option was found
To solve that, set up vi to be your editor temporarily
$ EDITOR=vi
$ export EDITOR