Git::Release ============ (Working in progress, alpha stage) Git::Release provides many useful features to reduce your release process efforts. it defines many tasks for release process and which are generalized, easy to use. # The Release Process ## The main branches * master * develop ### Master Branch The master branch at origin should be familiar to every Git user. Parallel to the master branch. We consider origin/master to be the main branch where the source code of HEAD always reflects a production-ready state. ### Develop Branch We consider origin/develop to be the main branch where the source code of HEAD always reflects a state with the latest delivered development changes for the next release. Some would call this the “integration branch”. This is where any automatic nightly builds are built from. ### Feature Branch A feature branch may branch off from `develop` branch, Once the feature branch is finished, the branch should be renamed with ready/ prefix first, which means this branch is ready to be released. it should be merged back to a release branch later if the feature branch is schuduled to be released. By using ready/ prefix, you can easily distinguish what branch is going to be released, what branch should be waiting the next release. To create a feature branch from current branch: $ git feature [feature name] To create a feature branch from a branch: $ git feature [feature name] [your branch] This will create a feature branch with prefix `feature/`, you can configure the prefix in your `.gitconfig` file. A branch named like `feature/ajax` will be created. To list feature branches: $ git feature --list ### Branch document To show the document of a branch: $ git branch-doc ### Hotfix Branch May branch off from `master`, Must merge back to `develop` and `master`. To create a hotfix branch from master: $ git hotfix [hotfix name] This is not recommended, but you can still create a hotfix branch from a specified branch, if your production branch is not named master, $ git hotfix [hotfix name] your_branch To list hotfix branches: $ git hotfix --list ### Release Ready Branch When your feature branch or hotfix branch are ready to go, move into ready/ directory, and the branch will be merged into current release branch for testing. To move current branch to ready/: $ git ready To move specified branch to ready/: $ git ready [branch name] For example, to setup hotfix-3011 branch to ready. $ git ready hotfix/bug3011 > ready/hotfix/bug3011 Steps are followed below: * Trigger unit tests, selenium tests, continue to next step if it passed. * Prune remote branches. * Rename branch prefix to ready/ ### Release Candidate Branch A release candidate branch may branch off from `develop`, and must merge back into: `develop` & `master`. Branch naming convention: `rc` or `rc-{version name}` To create a release candiate branch: $ git rc Steps are followed below: * checkout rc branch * find release ready branches (with ready/ prefix) * merge ready branches one by one, and do testing after each merge. Once your release branch is ready, you can run release. $ git release (Not implemented yet) The release steps are followed below, * Rename current ready/ branches with released prefix. * Merge current release branch into master. * Delete current release branch. * Tag a release version on master. * Rebase master branch onto `develop` branch. ### Site Branch Each different site depends on a different released framework version, So a site branch is branched off from a released framework version. Custom Features might be developed on it, some of them can be merged back into the next release branch. # Setup To install Git::Release process flow helper scripts. git release-init # Configuration to customzie your git-release config, edit your .gitconfig: [release] develop-branch = development production-branch = master production-branch = production release-branch-prefix = release feature-branch-prefix = feature hotfix-branch-prefix = hotfix site-branch-prefix = site # Reference http://nvie.com/posts/a-successful-git-branching-model/ http://reinh.com/blog/2009/03/02/a-git-workflow-for-agile-teams.html # Todo * redmine ticket integration. * config integration. (Comments are welcome)