The branches whose names end in -tracking have a history in GIT. This history allows us to go back and to check who did what and when it happened.

Committed patches appear directly on the branch they were
committed on. If a patch goes into stable-tracking it will appear
there as normal, but what appears in the downstream branches rebasing
off that is a single MERGE commit that contains whatever the diff is
between the unrebased and rebased version of that branch. Since Andy
rebases very often, it will not be unusual that the MERGE version used
downstream is just the one added upstream patch content, but it can also
be typical that the MERGE commit will contain the changes from dozens or
hundreds of patches when the Linus tree updates or example.

The reason for this new way is that it gives the public -tracking
branches a linear history that you can rewind, despite that they are
being hard rebased constantly.

Think of this as the branch where most of the action takes place (at least for most of us).
If you simply target andy-tracking for patches, the resulting patch will
automatically be ready for either andy-tracking, pending-tracking
(usually) or stable-tracking depending on what it touched.

We can end up with a bunch of patches from several
directions heading into various upstreams if we're lucky.

We have a "pending-tracking" that fits in between stable-tracking and
andy-tracking, to temporarily hold all the patches that are expected to
come from upstream eventually. Balaji-tracking feeds into this now, but
there's other stuff like Matt's patches headed for s3c64xx upstream too.

This allows for Balaji's patches being rebased without writing
in balaji-tracking, and it also allows Andy to track changes from
balaji-tracking and elsewhere in one place too.

Patch belongs in upstream, eg, Linus or Ben Dooks tree -->
pending-tracking. It's kept segregated because we expect it to turn up
by upstream rebase path; if it changes on the way we can adapt it in
pending-tracking and rebase

Stuff temporarily in pending-tracking will eventually turn up from
upstream pulls, at that time it's no longer pending and is part of what
stable-tracking rebased against. The now duplicate patch in
pending-tracking is then removed. The patch ended up in stable-tracking.

Once the pending-tracking patch became part of stable-tracking, there is
no reason for the patches modifying or depending on it held until now in
andy-tracking not to merge back into stable-tracking either. So patches
in andy-tracking gravitate to stable-tracking as soon as possible too.

Views

Personal tools

Introduction

This page explains how we take advantage of GIT branches for kernel development at Openmoko. The Kernel page is the sister of this page.

How we use GIT History

The branches whose names end in -tracking have a history in GIT. This history allows us to go back and to check who did what and when it happened.

Committed patches appear directly on the branch they were
committed on. If a patch goes into stable-tracking it will appear
there as normal, but what appears in the downstream branches rebasing
off that is a single MERGE commit that contains whatever the diff is
between the unrebased and rebased version of that branch. Since Andy
rebases very often, it will not be unusual that the MERGE version used
downstream is just the one added upstream patch content, but it can also
be typical that the MERGE commit will contain the changes from dozens or
hundreds of patches when the Linus tree updates or example.

The reason for this new way is that it gives the public -tracking
branches a linear history that you can rewind, despite that they are
being hard rebased constantly.

andy-tracking

We will fork stable kernels from this branch.

Think of this as the branch where most of the action takes place (at least for most of us).

This is the branch we usually target for patches but this is not always the case. If in doubt ask in the mailing list.

pending-tracking

stable-tracking

2) pending-tracking created

It's become clear we can end up with a bunch of patches from several
directions heading into various upstreams if we're lucky. So I have
introduced a "pending-tracking" that fits inbetween stable-tracking and
andy-tracking, to temporarily hold all the patches that are expected to
come from upstream eventually. Balaji-tracking feeds into this now, but
there's other stuff like Matt's patches headed for s3c64xx upstream too.
~ This also allows me to publicly rebase Balaji's patches without writing
in balaji-tracking, and it also allows me to track changes from
balaji-tracking and elsewhere in one place too.

3) How is it decided what goes on which branch

~ - Patch belongs in upstream, eg, Linus or Ben Dooks tree -->
pending-tracking. It's kept segregated because we expect it to turn up
by upstream rebase path; if it changes on the way we can adapt it in
pending-tracking and rebase

Stuff temporarily in pending-tracking will eventually turn up from
upstream pulls, at that time it's no longer pending and is part of what
stable-tracking rebased against. The now duplicate patch in
pending-tracking is then removed. The patch ended up in stable-tracking.

Once the pending-tracking patch became part of stable-tracking, there is
no reason for the patches modifying or depending on it held until now in
andy-tracking not to merge back into stable-tracking either. So patches
in andy-tracking gravitate to stable-tracking as soon as possible too.

5) We will fork the new stable from andy-tracking

Because andy-tracking is "living in the future" with latest pending
upstream patches included, it makes sense to take the advantage from
these even at the risk the patches will be rejected upstream.

6) Target andy-tracking for patches

If you simply target andy-tracking for patches, the resulting patch will
automatically be ready for either andy-tracking, pending-tracking
(usually) or stable-tracking depending on what it touched.

Credits

This page started as an improvement of this email sent by Andy Green to the Openmoko kernel list.