[cmake-developers] Topic-based Git workflow for CMake
Brad King
brad.king at kitware.com
Thu May 13 11:47:11 EDT 2010
Hi Folks,
We are about to switch to a branchy, topic-based workflow for CMake
development with Git. The approach is based on a workflow documented
in "git help workflows". We've written a Wiki page to document it:
http://public.kitware.com/Wiki/Git/Workflow/Topic
along with step-by-step development instructions. Please read this
carefully before doing any development after the transition to the
new workflow.
Here is the transition plan:
(1) Disable pushes to "cmake.git".
We need to freeze to complete the transition cleanly.
(2) Merge my 'version' branch into master.
This introduces a new version numbering scheme to handle the new
workflow. Basically, master is "major.minor.patch" for releases
and then "major.minor.patch.<date>" during development beyond a
release. For example, 2.8.1.20100504 predates release 2.8.2, and
development after 2.8.2 is something like 2.8.2.20100601. This
way the version on master always increases. Also, an abbreviated
Git commit hash will be appended to development versions (e.g.
2.8.1.20100504-g2f944).
(3) Merge the 'release' branch into master.
This represents the end of separately staged release branches.
The merge will be done as follows:
(3a) Merge but keep everything from master (git merge -s ours)
(3b) Amend merge to revert version from 2.9.0 back to 2.8.1
(3c) Amend merge to add ChangeLog.manual
(3d) Amend merge to add changes since 2.8 started to ChangeLog
Despite the "amend" steps, this is not a so-called "evil merge".
It is a logical merging of the 2.9 and 2.8 development paths.
(4) Spawn maint from 'v2.8.1'.
(5) Spawn next from 'master'.
These are the new integration branches. See the above workflow
documentation.
(6) Switch 'nightly' to follow 'next' by robot
(7) Switch 'release' to follow 'master' by robot
These are branches to be followed by dashboard clients. The
current "Nightly" and "Nightly Expected" sections of the dashboard
will follow 'nightly'. The current "Nightly 2.8 Release" section
will follow 'release'. No CTest dashboard scripts need to change
if they already follow one of these branches.
(8) Enable pushes to cmake.git on 'next'.
Core developers will merge release-ready topics to master.
This replaces our previous mass cherry-pick&squash pattern
for preparing release candidates.
-Brad
More information about the cmake-developers
mailing list