On Wed, Jun 18, 2025 at 02:29:49PM +0100, Simon McVittie wrote:
> The typical Github/Gitlab workflow encourages having a separation between
> two categories of branches:
> 
> - stable, "public", safe to reference and will not be force-pushed
>   (for example "main" or "0.2.x" or "debian/latest")
> 
> - work-in-progress, unstable, expected to be force-pushed, only exist as   a
> collaboration point
> 
> In the email-based Linux-kernel workflow, if I understand correctly, the
> convention is that only the first category ever get pushed anywhere public,
> and the second category exist only on your laptop (because they're sent to
> other developers as patches, rather than as a complete branch).

It varies; for large patch sets, the developer submitting the change
will publish it some place public.  This is why on git.kernel.org
you'll see trees such as kernel/git/djwong/e2fsprogs, for example.
(Darrick had some 50+ commits to fuse2fs split across 5 or 6 patch
series, and in that case, the first few series were bug fixes, and the
last few patch series were massive changes for better performance
using iomap and large folios, and will wait until I open up the tree
for the next major release of e2fsprogs.  During the interim Darrick
has been rebasing his tree as I finalize e2fsprogs 1.47.3.)

There are also some subsystem maintainers that will take something
that isn't quite _final_ onto their subsystem branch, and then they
will replace the patch series by rewinding the branch when there are
updates.  That way the not-yet-final, but mostly ready patch set can
get testing exposure on linux-next.  Christian Brauner has been known
to do this with the VFS.git tree, for example.  This is great, because
those of us doing CI testing specific to xfs, ext4, btrfs, and
bcachefs, can test upcoming changes while the patch series is still
being worked upon.  Basically, there is no one single way things get
done.

People will also tag their code submissions with tags in the subject
line, e.g. "[PATCH RFC]", or "[PATCH WIP]" or even "[PATCH DO NOT SUBMIT]".

If there are a huge number of pending changes, I will create a branch
of the form "<initials>/<branch>" and merge them into a "pu" branch
("proposed updates") which is a convention used by Junio in the git
repo (which also uses a e-mail based workflow, BTW --- and I haven't
noticed a shortage of new contributors to git, *either*).

I generally only will use the pu branch workflow when when are a large
number of outstanding patch series, some of which might have merge
conflicts, so that contributors know about the potential issues, can
let me know if I screwed up the merge resolution, and otherwise
collectively help with the air traffic control as we try to
successfully land those patch series.

(Good luck doing this with the Forge Merge Request paradigm!)

Cheers,

                                        - Ted

Reply via email to