It sounds like your feature branches are being finished before the
features are actually finished. We had a similar problem on my dev
team, and we instituted a very strict approval process before
'finishing' feature branches. No feature branches are finished unless
that particular feature is actually complete, *and* it is slated to be
in the next release. So now we have a lot of feature branches hanging
around in our central repo, but our dev branch is always deployable.
> This would allow all sorts of half-finished or untested features to be merged
> into the develop branch without affecting the deployability of the release branch.
Yup, that's your real problem right there... Develop branch can be
merged into half-finished and untested feature branches, but not the
other way around. Feature branches aren't "finished" until they're
actually ready to deploy.
For testing, UAT, etc. we regularly deploy incomplete feature branches
to our dev or staging servers (via a normal `git checkout
feature/foo`), but the `develop` branch is expected to be releasable
at any given time.
In fact, our continuous integration server runs our test suite any
time there's a commit to the develop branch. If something breaks or
there's a regression in that branch, the developer who finished the
incomplete feature is responsible.
--
justin
http://justinhileman.com
Greg,
git is built to do things like integration branches. I build (and
discard) them all the time... Right now git-flow is an abstraction
around common git workflows that take too many steps. In this case,
the vanilla git way is pretty straightforward, and would take the same
amount of typing as a git-flow canonicalized implementation:
git checkout develop
git checkout -b integration/foo-bar
git merge feature/foo
git merge feature/bar
git push origin integration/foo-bar
--
justin
http://justinhileman.com