Submitting Patches
==================

== Guidelines

Here are some guidelines for contributing back to this
project. There is also a link:MyFirstContribution.html[step-by-step tutorial]
available which covers many of these same guidelines.

[[patch-flow]]
=== A typical life cycle of a patch series

To help us understand the reason behind various guidelines given later
in the document, first let's understand how the life cycle of a
typical patch series for this project goes.

. You come up with an itch.  You code it up.  You do not need any
  pre-authorization from the project to do so.
+
Your patches will be reviewed by other contributors on the mailing
list, and the reviews will be done to assess the merit of various
things, like the general idea behind your patch (including "is it
solving a problem worth solving in the first place?"), the reason
behind the design of the solution, and the actual implementation.
The guidelines given here are there to help your patches by making
them easier to understand by the reviewers.

. You send the patches to the list and cc people who may need to know
  about the change.  Your goal is *not* necessarily to convince others
  that what you are building is good.  Your goal is to get help in
  coming up with a solution for the "itch" that is better than what
  you can build alone.
+
The people who may need to know are the ones who worked on the code
you are touching.  These people happen to be the ones who are
most likely to be knowledgeable enough to help you, but
they have no obligation to help you (i.e. you ask them for help,
you don't demand).  +git log -p {litdd} _$area_you_are_modifying_+ would
help you find out who they are.
+
It is also a good idea to check whether your topic has been discussed
previously on the mailing list, or whether similar work is already in
progress.  Prior discussions may contain useful context, design
considerations, or earlier attempts at solving the same problem. Being
aware of such discussions can help you avoid duplicating work and may
allow you to coordinate with other contributors working in the same
area.

. You get comments and suggestions for improvements.  You may even get
  them in an "on top of your change" patch form.  You are expected to
  respond to them with "Reply-All" on the mailing list, instead of
  letting an updated patch series be your only response.  Tell
  reviewers which suggestions you plan to use, which ones you disagree
  with, and when a comment leads you to consider a different approach.
  Use these replies and any follow-up discussion as input when
  preparing an updated set of patches.
+
Be particularly mindful of critiques regarding the high-level design
or viability of your proposal (e.g., questioning if the feature is
worth implementing, or if the chosen approach is appropriate).  Defend
your design decisions on the list first and work with reviewers and
other members to improve the design before revising the implementation.
This will avoid wasting effort on an implementation before its design is
solid.
+
Make sure that any new version explains and justifies those design
decisions more clearly, in the cover letter and in the revised commit
messages.  Aim to make the reviewers say "it is now clear why we may
want to do this with the updated version".
+
Topics with unresolved fundamental design critiques will not be
considered ready for merging.
+
It is often beneficial to allow some time for reviewers to provide
feedback before sending a new version, rather than sending an updated
series immediately after receiving a review. This helps collect broader
input, gives reviewers in different time zones a fair chance to comment,
and avoids unnecessary churn from many rapid iterations.  Waiting also
encourages you to polish each version before sending it, so reviewers
can focus on substantial issues rather than typos or other small
mistakes.
+
As a rough default, avoid sending more than one new version of the same
series per day, while considering the size of the series and the depth
of review.

. These early update iterations are expected to be full replacements,
  not incremental updates on top of what you posted already.  If you
  are correcting mistakes you made in the previous iteration that a
  reviewer noticed and pointed out in their review, you _fix_ that
  mistake by rewriting your history (e.g., by using "git rebase -i")
  to pretend that you never made the mistake in the first place.  In
  other words, this is a chance to pretend to be a perfect developer,
  and you are expected to take advantage of that.  In the larger
  picture, nobody is interested in your earlier mistakes.  Just
  present a logical progression made by a perfect developer who makes
  no mistakes while working on the topic.

. Polish, refine, and re-send your patches to the list and to the people
  who spent their time to improve your patch.  Go back to step (2).

. While the above iterations improve your patches, the maintainer may
  pick the patches up from the list and queue them to the `seen`
  branch, in order to make it easier for people to play with it
  without having to pick up and apply the patches to their trees
  themselves.  Being in `seen` has no other meaning.  Specifically, it
  does not mean the patch was "accepted" in any way.

. When the discussion reaches a consensus that the latest iteration of
  the patches are in good enough shape, the maintainer includes the
  topic in the "What's cooking" report that are sent out a few times a
  week to the mailing list, marked as "Will merge to 'next'."  This
  decision is primarily made by the maintainer with help from those
  who participated in the review discussion.

. After the patches are merged to the 'next' branch, the discussion
  can still continue to further improve them by adding more patches on
  top, but by the time a topic gets merged to 'next', it is expected
  that everybody agrees that the scope and the basic direction of the
  topic are appropriate, so such an incremental updates are limited to
  small corrections and polishing.  After a topic cooks for some time
  (like 7 calendar days) in 'next' without needing further tweaks on
  top, it gets merged to the 'master' branch and waits to become part
  of the next major release.

But sometimes things do not work as planned:

. If a mailing list discussion convinces you that your changes aren't
  ideal, please explicitly retract the topic to save the maintainer
  time and effort.

. If you must drop a topic due to shifting priorities, lack of time,
  or other commitments, notify the list as a courtesy so others can
  take over. Anyone can resurrect the topic later when they have the
  capacity to do so.

. Topics with unaddressed review comments that remain inactive for
  four weeks may be discarded by the maintainer.

In the following sections, many techniques and conventions are listed
to help your patches get reviewed effectively in such a life cycle.


[[choose-starting-point]]
=== Choose a starting point.

As a preliminary step, you must first choose a starting point for your
work. Typically this means choosing a branch, although technically
speaking it is actually a particular commit (typically the HEAD, or tip,
of the branch).

There are several important branches to be aware of. Namely, there are
four integration branches as discussed in linkgit:gitworkflows[7]:

* maint
* master
* next
* seen

The branches lower on the list are typically descendants of the ones
that come before it. For example, `maint` is an "older" branch than
`master` because `master` usually has patches (commits) on top of
`maint`.

There are also "topic" branches, which contain work from other
contributors.  Topic branches are created by the Git maintainer (in
their fork) to organize the current set of incoming contributions on
the mailing list, and are itemized in the regular "What's cooking in
git.git" announcements.  To find the tip of a topic branch, run `git log
--first-parent master..seen` and look for the merge commit. The second
parent of this commit is the tip of the topic branch.

There is one guiding principle for choosing the right starting point: in
general, always base your work on the oldest integration branch that
your change is relevant to (see "Merge upwards" in
linkgit:gitworkflows[7]).  What this principle means is that for the
vast majority of cases, the starting point for new work should be the
latest HEAD commit of `maint` or `master` based on the following cases:

* If you are fixing bugs in the released version, use `maint` as the
  starting point (which may mean you have to fix things without using
  new API features on the cutting edge that recently appeared in
  `master` but were not available in the released version).

* Otherwise (such as if you are adding new features) use `master`.


NOTE: In exceptional cases, a bug that was introduced in an old
version may have to be fixed for users of releases that are much older
than the recent releases.  `git describe --contains X` may describe
`X` as `v2.30.0-rc2-gXXXXXX` for the commit `X` that introduced the
bug, and the bug may be so high-impact that we may need to issue a new
maintenance release for Git 2.30.x series, when "Git 2.41.0" is the
current release.  In such a case, you may want to use the tip of the
maintenance branch for the 2.30.x series, which may be available in the
`maint-2.30` branch in https://github.com/gitster/git[the maintainer's
"broken out" repo].

This also means that `next` or `seen` are inappropriate starting points
for your work, if you want your work to have a realistic chance of
graduating to `master`.  They are simply not designed to be used as a
base for new work; they are only there to make sure that topics in
flight work well together. This is why both `next` and `seen` are
frequently re-integrated with incoming patches on the mailing list and
force-pushed to replace previous versions of themselves. A topic that is
literally built on top of `next` cannot be merged to `master` without
dragging in all the other topics in `next`, some of which may not be
ready.

For example, if you are making tree-wide changes, while somebody else is
also making their own tree-wide changes, your work may have severe
overlap with the other person's work.  This situation may tempt you to
use `next` as your starting point (because it would have the other
person's work included in it), but doing so would mean you'll not only
depend on the other person's work, but all the other random things from
other contributors that are already integrated into `next`.  And as soon
as `next` is updated with a new version, all of your work will need to
be rebased anyway in order for them to be cleanly applied by the
maintainer.

Under truly exceptional circumstances where you absolutely must depend
on a select few topic branches that are already in `next` but not in
`master`, you may want to create your own custom base-branch by forking
`master` and merging the required topic branches into it. You could then
work on top of this base-branch.  But keep in mind that this base-branch
would only be known privately to you.  So when you are ready to send
your patches to the list, be sure to communicate how you created it in
your cover letter.  This critical piece of information would allow
others to recreate your base-branch on their end in order for them to
try out your work.

Finally, note that some parts of the system have dedicated maintainers
with their own separate source code repositories (see the section
"Subsystems" below).

[[separate-commits]]
=== Make separate commits for logically separate changes.

Unless your patch is really trivial, you should not be sending
out a patch that was generated between your working tree and
your commit head.  Instead, always make a commit with complete
commit message and generate a series of patches from your
repository.  It is a good discipline.

Give an explanation for the change(s) that is detailed enough so
that people can judge if it is good thing to do, without reading
the actual patch text to determine how well the code does what
the explanation promises to do.

If your description starts to get too long, that's a sign that you
probably need to split up your commit to finer grained pieces.
That being said, patches which plainly describe the things that
help reviewers check the patch, and future maintainers understand
the code, are the most beautiful patches.  Descriptions that summarize
the point in the subject well, and describe the motivation for the
change, the approach taken by the change, and if relevant how this
differs substantially from the prior version, are all good things
to have.

Make sure that you have tests for the bug you are fixing.  See
`t/README` for guidance.

[[tests]]
When adding a new feature, make sure that you have new tests to show
the feature triggers the new behavior when it should, and to show the
feature does not trigger when it shouldn't.  After any code change,
make sure that the entire test suite passes.  When fixing a bug, make
sure you have new tests that break if somebody else breaks what you
fixed by accident to avoid regression.  Also, try merging your work to
'next' and 'seen' and make sure the tests still pass; topics by others
that are still in flight may have unexpected interactions with what
you are trying to do in your topic.

Pushing to a fork of https://github.com/git/git will use their CI
integration to test your changes on Linux, Mac and Windows. See the
<<GHCI,GitHub CI>> section for details.

Do not forget to update the documentation to describe the updated
behavior and make sure that the resulting documentation set formats
well (try the Documentation/doc-diff script).

[[typofixes]]
We currently have a liberal mixture of US and UK English norms for
spelling and grammar, which is somewhat unfortunate.  A huge patch that
touches the files all over the place only to correct the inconsistency
is not welcome, though.  Potential clashes with other changes that can
result from such a patch are not worth it.  We prefer to gradually
reconcile the inconsistencies in favor of US English, with small and
easily digestible patches, as a side effect of doing some other real
work in the vicinity (e.g. rewriting a paragraph for clarity, while
turning en_UK spelling to en_US).  Obvious typographical fixes are much
more welcomed ("teh -> "the"), preferably submitted as independent
patches separate from other documentation changes.

[[whitespace-check]]
Oh, another thing.  We are picky about whitespaces.  Make sure your
changes do not trigger errors with the sample pre-commit hook shipped
in `templates/hooks--pre-commit`.  To help ensure this does not happen,
run `git diff --check` on your changes before you commit.

[[describe-changes]]
=== Describe your changes well.

The log message that explains your changes is just as important as the
changes themselves.  Your code may be clearly written with in-code
comment to sufficiently explain how it works with the surrounding
code, but those who need to fix or enhance your code in the future
will need to know _why_ your code does what it does, for a few
reasons:

. Your code may be doing something differently from what you wanted it
  to do.  Writing down what you actually wanted to achieve will help
  them fix your code and make it do what it should have been doing
  (also, you often discover your own bugs yourself, while writing the
  log message to summarize the thought behind it).

. Your code may be doing things that were only necessary for your
  immediate needs (e.g. "do X to directories" without implementing or
  even designing what is to be done on files).  Writing down why you
  excluded what the code does not do will help guide future developers.
  Writing down "we do X to directories, because directories have
  characteristic Y" would help them infer "oh, files also have the same
  characteristic Y, so perhaps doing X to them would also make sense?".
  Saying "we don't do the same X to files, because ..." will help them
  decide if the reasoning is sound (in which case they do not waste
  time extending your code to cover files), or reason differently (in
  which case, they can explain why they extend your code to cover
  files, too).

The goal of your log message is to convey the _why_ behind your change
to help future developers.  The reviewers will also make sure that
your proposed log message will serve this purpose well.

The first line of the commit message should be a short description (50
characters is the soft limit, see DISCUSSION in linkgit:git-commit[1]),
and should skip the full stop.  It is also conventional in most cases to
prefix the first line with "area: " where the area is a filename or
identifier for the general area of the code being modified, e.g.

* doc: clarify distinction between sign-off and pgp-signing
* githooks.txt: improve the intro section

If in doubt which identifier to use, run `git log --no-merges` on the
files you are modifying to see the current conventions.

[[summary-section]]
The title sentence after the "area:" prefix omits the full stop at the
end, and its first word is not capitalized (the omission
of capitalization applies only to the word after the "area:"
prefix of the title) unless there is a reason to
capitalize it other than because it is the first word in the sentence.
E.g. "doc: clarify...", not "doc: Clarify...", or "githooks.txt:
improve...", not "githooks.txt: Improve...".  But "refs: HEAD is also
treated as a ref" is correct, as we spell `HEAD` in all caps even when
it appears in the middle of a sentence.

[[meaningful-message]]
The body should provide a meaningful commit message, which:

. explains the problem the change tries to solve, i.e. what is wrong
  with the current code without the change.

. justifies the way the change solves the problem, i.e. why the
  result with the change is better.

. alternate solutions considered but discarded, if any.

. records the resolution of design or viability concerns raised by the
  community during the review, if any, ensuring the historical record
  explains why the chosen approach was accepted over alternatives.

[[present-tense]]
The problem statement that describes the status quo is written in the
present tense.  Write "The code does X when it is given input Y",
instead of "The code used to do Y when given input X".  You do not
have to say "Currently"---the status quo in the problem statement is
about the code _without_ your change, by project convention.

[[imperative-mood]]
Describe your changes in imperative mood, e.g. "make xyzzy do frotz"
instead of "[This patch] makes xyzzy do frotz" or "[I] changed xyzzy
to do frotz", as if you are giving orders to the codebase to change
its behavior.  Try to make sure your explanation can be understood
without external resources. Instead of giving a URL to a mailing list
archive, summarize the relevant points of the discussion.

[[commit-reference]]

There are a few reasons why you may want to refer to another commit in
the "more stable" part of the history (i.e. on branches like `maint`,
`master`, and `next`):

. A commit that introduced the root cause of a bug you are fixing.

. A commit that introduced a feature that you are enhancing.

. A commit that conflicts with your work when you made a trial merge
  of your work into `next` and `seen` for testing.

When you reference a commit on a more stable branch (like `master`,
`maint` and `next`), use the format "abbreviated hash (subject,
date)", like this:

....
	Commit f86a374 (pack-bitmap.c: fix a memleak, 2015-03-30)
	noticed that ...
....

The "Copy commit reference" command of gitk can be used to obtain this
format (with the subject enclosed in a pair of double-quotes), or this
invocation of `git show`:

....
	git show -s --pretty=reference <commit>
....

or, on an older version of Git without support for --pretty=reference:

....
	git show -s --date=short --pretty='format:%h (%s, %ad)' <commit>
....

[[sign-off]]
=== Certify your work by adding your `Signed-off-by:` trailer

To improve tracking of who did what, we ask you to certify that you
wrote the patch or have the right to pass it on under the same license
as ours, by "signing off" your patch.  Without sign-off, we cannot
accept your patches.

If (and only if) you certify the below D-C-O:

[[dco]]
.Developer's Certificate of Origin 1.1
____
By making a contribution to this project, I certify that:

a. The contribution was created in whole or in part by me and I
   have the right to submit it under the open source license
   indicated in the file; or

b. The contribution is based upon previous work that, to the best
   of my knowledge, is covered under an appropriate open source
   license and I have the right under that license to submit that
   work with modifications, whether created in whole or in part
   by me, under the same open source license (unless I am
   permitted to submit under a different license), as indicated
   in the file; or

c. The contribution was provided directly to me by some other
   person who certified (a), (b) or (c) and I have not modified
   it.

d. I understand and agree that this project and the contribution
   are public and that a record of the contribution (including all
   personal information I submit with it, including my sign-off) is
   maintained indefinitely and may be redistributed consistent with
   this project or the open source license(s) involved.
____

you add a `Signed-off-by:` trailer to your commit, that looks like
this:

....
	Signed-off-by: Random J Developer <random@developer.example.org>
....

This line can be added by Git if you run the git-commit command with
the -s option.

Notice that you can place your own `Signed-off-by:` trailer when
forwarding somebody else's patch with the above rules for
D-C-O.  Indeed you are encouraged to do so.  Do not forget to
place an in-body "From: " line at the beginning to properly attribute
the change to its true author (see (2) above).

Place this `Signed-off-by:` trailer at the end, after trailers added by
others and after other trailers added by you; see
<<commit-trailers,Commit trailers>> below ("chronological order").

This procedure originally came from the Linux kernel project, so our
rule is quite similar to theirs, but what exactly it means to sign-off
your patch differs from project to project, so it may be different
from that of the project you are accustomed to.

[[real-name]]
Please use a known identity in the `Signed-off-by:` trailer, since we cannot
accept anonymous contributions. It is common, but not required, to use some form
of your real name. We realize that some contributors are not comfortable doing
so or prefer to contribute under a pseudonym or preferred name and we can accept
your patch either way, as long as the name and email you use are distinctive,
identifying, and not misleading.

The goal of this policy is to allow us to have sufficient information to contact
you if questions arise about your contribution.

[[commit-trailers]]
=== Commit trailers
It is polite to credit people who have helped with your work to a
substantial enough degree. This project uses commit trailers for that,
where the credited person is written out like a Git author, i.e. with
both their name and their email address. Note that the threshold to
credit someone is a judgement call, and crediting someone for simple
review work is certainly not necessary.

These are the common trailers in use:

. `Reported-by:` is used to credit someone who found the bug that
  the patch attempts to fix.
. `Acked-by:` says that the person who is more familiar with the area
  the patch attempts to modify liked the patch.
. `Reviewed-by:`, unlike the other trailers, can only be offered by the
  reviewers themselves when they are completely satisfied with the
  patch after a detailed analysis.
. `Tested-by:` is used to indicate that the person applied the patch
  and found it to have the desired effect.
. `Co-authored-by:` is used to indicate that people exchanged drafts
   of a patch before submitting it.
. `Based-on-patch-by:` is used when someone else authored parts of the
  patch that you are submitting. This might be relevant if someone sent
  a patch to the mailing list with their sign-off. (Be mindful and ask
  them to sign off on it if they did not.)
. `Helped-by:` is used to credit someone who suggested ideas for
  changes without providing the precise changes in patch form.
. `Mentored-by:` is used to credit someone with helping develop a
  patch as part of a mentorship program (e.g., GSoC or Outreachy).
. `Suggested-by:` is used to credit someone with suggesting the idea
  for a patch.

While you can also create your own trailer if the situation warrants it, we
encourage you to instead use one of the common trailers in this project
highlighted above.

Other projects might regularly refer to other kinds of data, like
`Fixes:` and `Link:` in the Linux Kernel project, but these ones in
particular are not used in this project.

Only capitalize the very first letter of the trailer, i.e. favor
`Signed-off-by:` over `Signed-Off-By:` and `Acked-by:` over `Acked-By:`.

As mentioned under <<dco,DCO>> above, trailers are added in
chronological order; one person might sign-off on a patch and send it to
someone else, who then in turn adds her own sign-off. Further, any
trailers that you add beyond your sign-off should come before that
sign-off. That makes it clear what trailers which person added.

[[cover-letter]]
=== Cover Letter

The purpose of your cover letter is to sell your changes, explain what
they are about, and get your target audience interested enough to read
the patches.

. Every code change comes with risk of regression and maintenance cost.
  The cover letter should clearly communicate why the value of your
  proposed change is worth applying. You can also describe how the risk
  is reduced by the design choices you made while writing the patches.

. Make sure your target audience can understand what the patches are
  about and why they are needed without prior context.

. For a second or subsequent iteration of the same topic, make sure
  people who missed the earlier discussion can still understand what
  the patches are about, so they can judge if the topic is worth their
  time to read and comment on.

. To help those who are familiar with earlier iterations, give a
  summary of changes since the previous rounds.


[[ai]]
=== Use of Artificial Intelligence (AI)

The Developer's Certificate of Origin requires contributors to certify
that they know the origin of their contributions to the project and
that they have the right to submit it under the project's license.
It's not yet clear that this can be legally satisfied when submitting
significant amount of content that has been generated by AI tools.

Another issue with AI generated content is that AIs still often
hallucinate or just produce bad code, commit messages, documentation
or output, even when you point out their mistakes.

To avoid these issues, we will reject anything that looks AI
generated, that sounds overly formal or bloated, that looks like AI
slop, that looks good on the surface but makes no sense, or that
senders don’t understand or cannot explain.

We strongly recommend using AI tools carefully and responsibly.

Contributors would often benefit more from AI by using it to guide and
help them step by step towards producing a solution by themselves
rather than by asking for a full solution that they would then mostly
copy-paste. They can also use AI to help with debugging, or with
checking for obvious mistakes, things that can be improved, things
that don’t match our style, guidelines or our feedback, before sending
it to us.

[[git-tools]]
=== Generate your patch using Git tools out of your commits.

Git based diff tools generate unidiff which is the preferred format.

You do not have to be afraid to use `-M` option to `git diff` or
`git format-patch`, if your patch involves file renames.  The
receiving end can handle them just fine.

[[review-patch]]
Please make sure your patch does not add commented out debugging code,
or include any extra files which do not relate to what your patch
is trying to achieve. Make sure to review
your patch after generating it, to ensure accuracy.  Before
sending out, please make sure it cleanly applies to the starting point you
have chosen in the "Choose a starting point" section.

NOTE: From the perspective of those reviewing your patch, the `master`
branch is the default expected starting point.  So if you have chosen a
different starting point, please communicate this choice in your cover
letter.


[[send-patches]]
=== Sending your patches.

==== Choosing your reviewers

:security-ml: footnoteref:[security-ml,The Git Security mailing list: git-security@googlegroups.com]

NOTE: Patches that may be
security relevant should be submitted privately to the Git Security
mailing list{security-ml}, instead of the public mailing list.

:contrib-scripts: footnoteref:[contrib-scripts,Scripts under `contrib/` are +
not part of the core `git` binary and must be called directly. Clone the Git +
codebase and run `perl contrib/contacts/git-contacts`.]

Send your patch with "To:" set to the mailing list, with "cc:" listing
people who are involved in the area you are touching (the `git-contacts`
script in `contrib/contacts/`{contrib-scripts} can help to
identify them), to solicit comments and reviews.  Also, when you made
trial merges of your topic to `next` and `seen`, you may have noticed
work by others conflicting with your changes.  There is a good possibility
that these people may know the area you are touching well.

If you are using `send-email`, you can feed it the output of `git-contacts` like
this:

....
	git send-email --cc-cmd='perl contrib/contacts/git-contacts' feature/*.patch
....

:current-maintainer: footnote:[The current maintainer: gitster@pobox.com]
:git-ml: footnote:[The mailing list: git@vger.kernel.org]

After the list reached a consensus that it is a good idea to apply the
patch, re-send it with "To:" set to the maintainer{current-maintainer}
and "cc:" the list{git-ml} for inclusion.  This is especially relevant
when the maintainer did not heavily participate in the discussion and
instead left the review to trusted others.

Do not forget to add trailers such as `Acked-by:`, `Reviewed-by:` and
`Tested-by:` (see <<commit-trailers,Commit trailers>>), and "cc:" them
when sending such a final version for inclusion.

==== `format-patch` and `send-email`

Learn to use `format-patch` and `send-email` if possible.  These commands
are optimized for the workflow of sending patches, avoiding many ways
your existing e-mail client (often optimized for "multipart/*" MIME
type e-mails) might render your patches unusable.

NOTE: Here we outline the procedure using `format-patch` and
`send-email`, but you can instead use GitGitGadget or `b4` to send in
your patches (see link:MyFirstContribution.html[MyFirstContribution]).
Contributors are encouraged to use `b4`, which automates much of the
bookkeeping that is otherwise done by hand.

People on the Git mailing list need to be able to read and
comment on the changes you are submitting.  It is important for
a developer to be able to "quote" your changes, using standard
e-mail tools, so that they may comment on specific portions of
your code.  For this reason, each patch should be submitted
"inline" in a separate message.

All subsequent versions of a patch series and other related patches should be
grouped into their own e-mail thread to help readers find all parts of the
series.  To that end, send them as replies to either an additional "cover
letter" message (see below), the first patch, or the respective preceding patch.
Here is a link:MyFirstContribution.html#v2-git-send-email[step-by-step guide] on
how to submit updated versions of a patch series.  Before sending another
version, make sure you have answered meaningful review comments in the existing
discussion.  Also give reviewers enough time to comment before sending another
version.

If your log message (including your name on the
`Signed-off-by:` trailer) is not writable in ASCII, make sure that
you send off a message in the correct encoding.

WARNING: Be wary of your MUAs word-wrap
corrupting your patch.  Do not cut-n-paste your patch; you can
lose tabs that way if you are not careful.

It is a common convention to prefix your subject line with
[PATCH].  This lets people easily distinguish patches from other
e-mail discussions.  Use of markers in addition to PATCH within
the brackets to describe the nature of the patch is also
encouraged.  E.g. [RFC PATCH] (where RFC stands for "request for
comments") is often used to indicate a patch needs further
discussion before being accepted, [PATCH v2], [PATCH v3] etc.
are often seen when you are sending an update to what you have
previously sent.

The `git format-patch` command follows the best current practice to
format the body of an e-mail message.  At the beginning of the
patch should come your commit message, ending with the
`Signed-off-by:` trailers, and a line that consists of three dashes,
followed by the diffstat information and the patch itself.  If
you are forwarding a patch from somebody else, optionally, at
the beginning of the e-mail message just before the commit
message starts, you can put a "From: " line to name that person.
To change the default "[PATCH]" in the subject to "[<text>]", use
`git format-patch --subject-prefix=<text>`.  As a shortcut, you
can use `--rfc` instead of `--subject-prefix="RFC PATCH"`, or
`-v <n>` instead of `--subject-prefix="PATCH v<n>"`.

You often want to add additional explanation about the patch,
other than the commit message itself.  Place such "cover letter"
material between the three-dash line and the diffstat.  For
patches requiring multiple iterations of review and discussion,
an explanation of changes between each iteration can be kept in
Git-notes and inserted automatically following the three-dash
line via `git format-patch --notes`.

[[the-topic-summary]]
*This is EXPERIMENTAL*.

When sending a topic, you can optionally propose a topic name and/or a
one-paragraph summary that should appear in the "What's cooking"
report when it is picked up to explain the topic.  If you choose to do
so, please write a 2-5 line paragraph that will fit well in our
release notes (see many bulleted entries in the
Documentation/RelNotes/* files for examples), and make it the first
(or second, if including a suggested topic name) paragraph of the
cover letter.  If suggesting a topic name, use the format
"XX/your-topic-name", where "XX" is a stand-in for the primary
author's initials, and "your-topic-name" is a brief, dash-delimited
description of what your topic does.  For a single-patch series, use
the space between the three-dash line and the diffstat, as described
earlier.

[[multi-series-efforts]]
If your patch series is part of a larger effort spanning multiple
patch series, briefly describe the broader goal, and state where the
current series fits into that goal.  If you are suggesting a topic
name as in <<the-topic-summary, section above>>, consider
"XX/the-broader-goal-part-one", "XX/the-broader-goal-part-two", and so
on.

[[attachment]]
Do not attach the patch as a MIME attachment, compressed or not.
Do not let your e-mail client send quoted-printable.  Do not let
your e-mail client send format=flowed which would destroy
whitespaces in your patches. Many
popular e-mail applications will not always transmit a MIME
attachment as plain text, making it impossible to comment on
your code.  A MIME attachment also takes a bit more time to
process.  This does not decrease the likelihood of your
MIME-attached change being accepted, but it makes it more likely
that it will be postponed.

Exception:  If your mailer is mangling patches then someone may ask
you to re-send them using MIME, that is OK.

[[pgp-signature]]
Do not PGP sign your patch. Most likely, your maintainer or other people on the
list would not have your PGP key and would not bother obtaining it anyway.
Your patch is not judged by who you are; a good patch from an unknown origin
has a far better chance of being accepted than a patch from a known, respected
origin that is done poorly or does incorrect things.

If you really really really really want to do a PGP signed
patch, format it as "multipart/signed", not a text/plain message
that starts with `-----BEGIN PGP SIGNED MESSAGE-----`.  That is
not a text/plain, it's something else.

=== Handling Conflicts and Iterating Patches

When revising changes made to your patches, it's important to
acknowledge the possibility of conflicts with other ongoing topics. To
navigate these potential conflicts effectively, follow the recommended
steps outlined below:

. Build on a suitable base branch, see the <<choose-starting-point, section above>>,
and format-patch the series. If you are doing "rebase -i" in-place to
update from the previous round, this will reuse the previous base so
(2) and (3) may become trivial.

. Find the base of where the last round was queued
+
    $ mine='kn/ref-transaction-symref'
    $ git checkout "origin/seen^{/^Merge branch '$mine'}...master"

. Apply your format-patch result.  There are two cases
.. Things apply cleanly and tests fine.  Go to (4).
.. Things apply cleanly but does not build or test fails, or things do
not apply cleanly.
+
In the latter case, you have textual or semantic conflicts coming from
the difference between the old base and the base you used to build in
(1).  Identify what caused the breakages (e.g., a topic or two may have
merged since the base used by (2) until the base used by (1)).
+
Check out the latest 'origin/master' (which may be newer than the base
used by (2)), "merge --no-ff" the topics you newly depend on in there,
and use the result of the merge(s) as the base, rebuild the series and
test again.  Run format-patch from the last such merges to the tip of
your topic.  If you did
+
    $ git checkout origin/master
    $ git merge --no-ff --into-name kn/ref-transaction-symref fo/obar
    $ git merge --no-ff --into-name kn/ref-transaction-symref ba/zqux
    ... rebuild the topic ...
+
Then you'd just format your topic above these "preparing the ground"
merges, e.g.
+
    $ git format-patch "HEAD^{/^Merge branch 'ba/zqux'}"..HEAD
+
Do not forget to write in the cover letter you did this, including the
topics you have in your base on top of 'master'.  Then go to (4).

. Make a trial merge of your topic into 'next' and 'seen', e.g.
+
    $ git checkout --detach 'origin/seen'
    $ git revert -m 1 <the merge of the previous iteration into seen>
    $ git merge kn/ref-transaction-symref
+
The "revert" is needed if the previous iteration of your topic is
already in 'seen' (like in this case).  You could choose to rebuild
master..origin/seen from scratch while excluding your previous
iteration, which may emulate what happens on the maintainers end more
closely.
+
This trial merge may conflict.  It is primarily to see what conflicts
_other_ topics may have with your topic.  In other words, you do not
have to depend on it to make your topic work on 'master'.  It may
become the job of the other topic owners to resolve conflicts if your
topic goes to 'next' before theirs.
+
Make a note on what conflict you saw in the cover letter.  You do not
necessarily have to resolve them, but it would be a good opportunity to
learn what others are doing in related areas.
+
    $ git checkout --detach 'origin/next'
    $ git merge kn/ref-transaction-symref
+
This is to see what conflicts your topic has with other topics that are
already cooking.  This should not conflict if (3)-2 prepared a base on
top of updated master plus dependent topics taken from 'next'.  Unless
the context is severe (one way to tell is try the same trial merge with
your old iteration, which may conflict in a similar way), expect that it
will be handled on maintainers end (if it gets unmanageable, I'll ask to
rebase when I receive your patches).

== Subsystems with dedicated maintainers

Some parts of the system have dedicated maintainers with their own
repositories.

- `git-gui/` comes from the git-gui project, maintained by Johannes Sixt:

        https://github.com/j6t/git-gui

   Contibutions should go via the git mailing list.

- `gitk-git/` comes from the gitk project, maintained by Johannes Sixt:

	https://github.com/j6t/gitk

   Contibutions should go via the git mailing list.

- `po/` comes from the localization coordinator, Jiang Xin:

	https://github.com/git-l10n/git-po/

Patches to these parts should be based on their trees.

- The "Git documentation translations" project, led by Jean-Noël
  Avila, translates our documentation pages.  Their work products are
  maintained separately from this project, not as part of our tree:

	https://github.com/jnavila/git-manpages-l10n/


== GitHub CI[[GHCI]]

With an account at GitHub, you can use GitHub CI to test your changes
on Linux, Mac and Windows. See
https://github.com/git/git/actions/workflows/main.yml for examples of
recent CI runs.

Follow these steps for the initial setup:

. Fork https://github.com/git/git to your GitHub account.
  You can find detailed instructions how to fork here:
  https://help.github.com/articles/fork-a-repo/

After the initial setup, CI will run whenever you push new changes
to your fork of Git on GitHub.  You can monitor the test state of all your
branches here: `https://github.com/<Your GitHub handle>/git/actions/workflows/main.yml`

If a branch does not pass all test cases then it will be marked with a
red +x+, instead of a green check. In that case, you can click on the
failing job and navigate to "ci/run-build-and-tests.sh" and/or
"ci/print-test-failures.sh". You can also download "Artifacts" which
are zip archives containing tarred (or zipped) archives with test data
relevant for debugging.

Then fix the problem and push your fix to your GitHub fork. This will
trigger a new CI build to ensure all tests pass.

Even if you do not use GitHub CI to test your changes, pay close
attention to new failures on the branches when the maintainer pushes
out after your topic gets merged to the 'seen' branch to make sure
that your topic is not breaking the CI, and retract your breaking
topic quickly while you fix the breakage you caused.

To see maintainer's push, keep an eye on this page:

  `https://github.com/git/git/actions/workflows/main.yml?query=event%3Apush+actor%3Agitster`


[[mua]]
== MUA specific hints

Some of the patches I receive or pick up from the list share common
patterns of breakage.  Please make sure your MUA is set up
properly not to corrupt whitespaces.

See the DISCUSSION section of linkgit:git-format-patch[1] for hints on
checking your patch by mailing it to yourself and applying with
linkgit:git-am[1].

While you are at it, check the resulting commit log message from
a trial run of applying the patch.  If what is in the resulting
commit is not exactly what you would want to see, it is very
likely that your maintainer would end up hand editing the log
message when he applies your patch.  Things like "Hi, this is my
first patch.\n", if you really want to put in the patch e-mail,
should come after the three-dash line that signals the end of the
commit message.


=== Pine

(Johannes Schindelin)

....
I don't know how many people still use pine, but for those poor
souls it may be good to mention that the quell-flowed-text is
needed for recent versions.

... the "no-strip-whitespace-before-send" option, too. AFAIK it
was introduced in 4.60.
....

(Linus Torvalds)

....
And 4.58 needs at least this.

diff-tree 8326dd8350be64ac7fc805f6563a1d61ad10d32c (from e886a61f76edf5410573e92e38ce22974f9c40f1)
Author: Linus Torvalds <torvalds@g5.osdl.org>
Date:   Mon Aug 15 17:23:51 2005 -0700

    Fix pine whitespace-corruption bug

    There's no excuse for unconditionally removing whitespace from
    the pico buffers on close.

diff --git a/pico/pico.c b/pico/pico.c
--- a/pico/pico.c
+++ b/pico/pico.c
@@ -219,7 +219,9 @@ PICO *pm;
	    switch(pico_all_done){	/* prepare for/handle final events */
	      case COMP_EXIT :		/* already confirmed */
		packheader();
+#if 0
		stripwhitespace();
+#endif
		c |= COMP_EXIT;
		break;
....

(Daniel Barkalow)

....
> A patch to SubmittingPatches, MUA specific help section for
> users of Pine 4.63 would be very much appreciated.

Ah, it looks like a recent version changed the default behavior to do the
right thing, and inverted the sense of the configuration option. (Either
that or Gentoo did it.) So you need to set the
"no-strip-whitespace-before-send" option, unless the option you have is
"strip-whitespace-before-send", in which case you should avoid checking
it.
....

=== Thunderbird, KMail, GMail

See the MUA-SPECIFIC HINTS section of linkgit:git-format-patch[1].

=== Gnus

"|" in the `*Summary*` buffer can be used to pipe the current
message to an external program, and this is a handy way to drive
`git am`.  However, if the message is MIME encoded, what is
piped into the program is the representation you see in your
`*Article*` buffer after unwrapping MIME.  This is often not what
you would want for two reasons.  It tends to screw up non-ASCII
characters (most notably in people's names), and also
whitespaces (fatal in patches).  Running "C-u g" to display the
message in raw form before using "|" to run the pipe can work
this problem around.
