[commits] [Wiki] changed: Doc/Dev/Branches
Jan Schneider
jan at horde.org
Sat Jul 2 14:47:59 UTC 2011
jan Sat, 02 Jul 2011 14:47:59 +0000
Modified page: http://wiki.horde.org/Doc/Dev/Branches
New Revision: 2.0
Change log: Outline of a branching model
@@ -1,12 +1,62 @@
+ Branch management
-(First draft, already superceded)
+We follow a branching model that is a very simplified version of
http://nvie.com/posts/a-successful-git-branching-model/. The main
difference is that we do bug fixing and make releases from the
//master// branch, and only use release branches for older, still
maintained versions. It is suggested to read this post first, to get
an larger view on the ideas behind our branching model.
-We will actively maintain 3 development branches in Git:
-* Main development for the next release happens in the **master** branch.
- * Only when the release process starts, we will branch off
**master**, so that we can stabilize the code for the next release,
while still going forward with development in **master**.
- * Major, especially BC breaking changes will be done in **topic
branches**, to not have the **master** branch polluted with unstable
code when the next release cycle arrives.
-* The most recent two **major version branches** will be maintained
with security fixes.
+++ Main branches
-If for example we already had 4.0, 5.0 and 5.1 releases and are now
working on the 6.0 release, we would maintain FRAMEWORK_4_0,
FRAMEWORK_5_1 and master branches. Once 6.0 is released, we maintain
FRAMEWORK_5_1, FRAMEWORK_6_0 and master branches.
+There are two main branches, //master// and //develop//.
+
+- //master// is the branch for adding bug fixes. This is the code
that will become the next bug fix release.
+- //develop// is the branch for adding new features. This is the code
that will become the next major or minor release.
+
+//develop// has been branched off from //master// at one point, and
from time to time, bug fixes that have been applied to //master// are
merged back into //develop//:
+
+<code>
+$ git checkout develop
+$ git merge master
+$ git push
+</code>
+
+It is suggested to do that merging and pushing in a single, separate
action, so that "real" work on the //develop// branch isn't get lost
in the large commit messages of the merging.
+
+
+++ Topic branches
+
+Even though //develop// is the branch for new development and adding
features, larger features should be developed in a topic branch that
is branched off //develop//:
+
+<code>
+$ git checkout develop
+$ git checkout -b newfeature
+</code>
+
+This is to avoid breaking code in //develop//. This is important,
because //develop// is used for the next minor release, which will be
created at a set date. To avoid having to revert commits if
//develop// is unstable when the next release is near, such
development must be done in topic branches, that can be merged back to
develop, once they stabilized:
+
+<code>
+$ git checkout develop
+$ git merge newfeature
+$ git branch -d newfeature
+</code>
+
+These topic branches can be private, or public if other should
participate in development or testing. For creating public branches,
see
http://www.horde.org/development/git#creating-managing-remote-branches.
+
+Topic branches are especially important when developing code that
breaks backward compatibility, if it has **not** been decided yet
whether the next release will be a major or minor release.
+
+
+++ Release branches
+
+Release branches are maintenance branches for older releases. Once
the release process for a new minor/major version is starting, the
current version's code is branched off //master// into a release
branch, before the current //develop// branch is merged back into
//master// for the new version:
+
+<code>
+$ git checkout master
+$ git branch FRAMEWORK_4_0
+$ git merge develop
+</code>
+
+Since we always ((Doc/Dev/ReleaseCycle|maintain the two most recent
minor versions)) with security fixes, there will always be 3 active
branches (topic branches aside) at the same time. //master//,
//develop//, and the release branch for the last minor version.
+
+If for example we already had 4.0, 5.0 and 5.1 releases and are now
working on the 6.0 release, we would maintain //develop//, //master//
and //FRAMEWORK_5_1// branches.
+
+++ Tools
+
+[gitflow https://github.com/nvie/gitflow] is a tool for managing the
branching model of Vincent (nvie). If necessary, we might be able to
fork and adapt it to our simpler needs.
More information about the commits
mailing list