6 Here are some guidelines for people who want to contribute their code to this
7 software. There is also a link:MyFirstContribution.html[step-by-step tutorial]
8 available which covers many of these same guidelines.
11 === Decide what to base your work on.
13 In general, always base your work on the oldest branch that your
14 change is relevant to.
16 * A bugfix should be based on `maint` in general. If the bug is not
17 present in `maint`, base it on `master`. For a bug that's not yet
18 in `master`, find the topic that introduces the regression, and
19 base your work on the tip of the topic.
21 * A new feature should be based on `master` in general. If the new
22 feature depends on a topic that is in `seen`, but not in `master`,
23 base your work on the tip of that topic.
25 * Corrections and enhancements to a topic not yet in `master` should
26 be based on the tip of that topic. If the topic has not been merged
27 to `next`, it's alright to add a note to squash minor corrections
30 * In the exceptional case that a new feature depends on several topics
31 not in `master`, start working on `next` or `seen` privately and send
32 out patches for discussion. Before the final merge, you may have to
33 wait until some of the dependent topics graduate to `master`, and
36 * Some parts of the system have dedicated maintainers with their own
37 repositories (see the section "Subsystems" below). Changes to
38 these parts should be based on their trees.
40 To find the tip of a topic branch, run `git log --first-parent
41 master..seen` and look for the merge commit. The second parent of this
42 commit is the tip of the topic branch.
45 === Make separate commits for logically separate changes.
47 Unless your patch is really trivial, you should not be sending
48 out a patch that was generated between your working tree and
49 your commit head. Instead, always make a commit with complete
50 commit message and generate a series of patches from your
51 repository. It is a good discipline.
53 Give an explanation for the change(s) that is detailed enough so
54 that people can judge if it is good thing to do, without reading
55 the actual patch text to determine how well the code does what
56 the explanation promises to do.
58 If your description starts to get too long, that's a sign that you
59 probably need to split up your commit to finer grained pieces.
60 That being said, patches which plainly describe the things that
61 help reviewers check the patch, and future maintainers understand
62 the code, are the most beautiful patches. Descriptions that summarize
63 the point in the subject well, and describe the motivation for the
64 change, the approach taken by the change, and if relevant how this
65 differs substantially from the prior version, are all good things
68 Make sure that you have tests for the bug you are fixing. See
69 `t/README` for guidance.
72 When adding a new feature, make sure that you have new tests to show
73 the feature triggers the new behavior when it should, and to show the
74 feature does not trigger when it shouldn't. After any code change, make
75 sure that the entire test suite passes.
77 Pushing to a fork of https://github.com/git/git will use their CI
78 integration to test your changes on Linux, Mac and Windows. See the
79 <<GHCI,GitHub CI>> section for details.
81 Do not forget to update the documentation to describe the updated
82 behavior and make sure that the resulting documentation set formats
83 well (try the Documentation/doc-diff script).
85 We currently have a liberal mixture of US and UK English norms for
86 spelling and grammar, which is somewhat unfortunate. A huge patch that
87 touches the files all over the place only to correct the inconsistency
88 is not welcome, though. Potential clashes with other changes that can
89 result from such a patch are not worth it. We prefer to gradually
90 reconcile the inconsistencies in favor of US English, with small and
91 easily digestible patches, as a side effect of doing some other real
92 work in the vicinity (e.g. rewriting a paragraph for clarity, while
93 turning en_UK spelling to en_US). Obvious typographical fixes are much
94 more welcomed ("teh -> "the"), preferably submitted as independent
95 patches separate from other documentation changes.
98 Oh, another thing. We are picky about whitespaces. Make sure your
99 changes do not trigger errors with the sample pre-commit hook shipped
100 in `templates/hooks--pre-commit`. To help ensure this does not happen,
101 run `git diff --check` on your changes before you commit.
104 === Describe your changes well.
106 The first line of the commit message should be a short description (50
107 characters is the soft limit, see DISCUSSION in linkgit:git-commit[1]),
108 and should skip the full stop. It is also conventional in most cases to
109 prefix the first line with "area: " where the area is a filename or
110 identifier for the general area of the code being modified, e.g.
112 * doc: clarify distinction between sign-off and pgp-signing
113 * githooks.txt: improve the intro section
115 If in doubt which identifier to use, run `git log --no-merges` on the
116 files you are modifying to see the current conventions.
119 The title sentence after the "area:" prefix omits the full stop at the
120 end, and its first word is not capitalized unless there is a reason to
121 capitalize it other than because it is the first word in the sentence.
122 E.g. "doc: clarify...", not "doc: Clarify...", or "githooks.txt:
123 improve...", not "githooks.txt: Improve...". But "refs: HEAD is also
124 treated as a ref" is correct, as we spell `HEAD` in all caps even when
125 it appears in the middle of a sentence.
127 [[meaningful-message]]
128 The body should provide a meaningful commit message, which:
130 . explains the problem the change tries to solve, i.e. what is wrong
131 with the current code without the change.
133 . justifies the way the change solves the problem, i.e. why the
134 result with the change is better.
136 . alternate solutions considered but discarded, if any.
139 Describe your changes in imperative mood, e.g. "make xyzzy do frotz"
140 instead of "[This patch] makes xyzzy do frotz" or "[I] changed xyzzy
141 to do frotz", as if you are giving orders to the codebase to change
142 its behavior. Try to make sure your explanation can be understood
143 without external resources. Instead of giving a URL to a mailing list
144 archive, summarize the relevant points of the discussion.
147 If you want to reference a previous commit in the history of a stable
148 branch, use the format "abbreviated hash (subject, date)", like this:
151 Commit f86a374 (pack-bitmap.c: fix a memleak, 2015-03-30)
155 The "Copy commit summary" command of gitk can be used to obtain this
156 format (with the subject enclosed in a pair of double-quotes), or this
157 invocation of `git show`:
160 git show -s --pretty=reference <commit>
163 or, on an older version of Git without support for --pretty=reference:
166 git show -s --date=short --pretty='format:%h (%s, %ad)' <commit>
170 === Certify your work by adding your `Signed-off-by` trailer
172 To improve tracking of who did what, we ask you to certify that you
173 wrote the patch or have the right to pass it on under the same license
174 as ours, by "signing off" your patch. Without sign-off, we cannot
177 If (and only if) you certify the below D-C-O:
180 .Developer's Certificate of Origin 1.1
182 By making a contribution to this project, I certify that:
184 a. The contribution was created in whole or in part by me and I
185 have the right to submit it under the open source license
186 indicated in the file; or
188 b. The contribution is based upon previous work that, to the best
189 of my knowledge, is covered under an appropriate open source
190 license and I have the right under that license to submit that
191 work with modifications, whether created in whole or in part
192 by me, under the same open source license (unless I am
193 permitted to submit under a different license), as indicated
196 c. The contribution was provided directly to me by some other
197 person who certified (a), (b) or (c) and I have not modified
200 d. I understand and agree that this project and the contribution
201 are public and that a record of the contribution (including all
202 personal information I submit with it, including my sign-off) is
203 maintained indefinitely and may be redistributed consistent with
204 this project or the open source license(s) involved.
207 you add a "Signed-off-by" trailer to your commit, that looks like
211 Signed-off-by: Random J Developer <random@developer.example.org>
214 This line can be added by Git if you run the git-commit command with
217 Notice that you can place your own `Signed-off-by` trailer when
218 forwarding somebody else's patch with the above rules for
219 D-C-O. Indeed you are encouraged to do so. Do not forget to
220 place an in-body "From: " line at the beginning to properly attribute
221 the change to its true author (see (2) above).
223 This procedure originally came from the Linux kernel project, so our
224 rule is quite similar to theirs, but what exactly it means to sign-off
225 your patch differs from project to project, so it may be different
226 from that of the project you are accustomed to.
229 Also notice that a real name is used in the `Signed-off-by` trailer. Please
230 don't hide your real name.
233 If you like, you can put extra tags at the end:
235 . `Reported-by:` is used to credit someone who found the bug that
236 the patch attempts to fix.
237 . `Acked-by:` says that the person who is more familiar with the area
238 the patch attempts to modify liked the patch.
239 . `Reviewed-by:`, unlike the other tags, can only be offered by the
240 reviewers themselves when they are completely satisfied with the
241 patch after a detailed analysis.
242 . `Tested-by:` is used to indicate that the person applied the patch
243 and found it to have the desired effect.
245 You can also create your own tag or use one that's in common usage
246 such as "Thanks-to:", "Based-on-patch-by:", or "Mentored-by:".
249 === Generate your patch using Git tools out of your commits.
251 Git based diff tools generate unidiff which is the preferred format.
253 You do not have to be afraid to use `-M` option to `git diff` or
254 `git format-patch`, if your patch involves file renames. The
255 receiving end can handle them just fine.
258 Please make sure your patch does not add commented out debugging code,
259 or include any extra files which do not relate to what your patch
260 is trying to achieve. Make sure to review
261 your patch after generating it, to ensure accuracy. Before
262 sending out, please make sure it cleanly applies to the `master`
263 branch head. If you are preparing a work based on "next" branch,
264 that is fine, but please mark it as such.
267 === Sending your patches.
269 :security-ml: footnoteref:[security-ml,The Git Security mailing list: git-security@googlegroups.com]
271 Before sending any patches, please note that patches that may be
272 security relevant should be submitted privately to the Git Security
273 mailing list{security-ml}, instead of the public mailing list.
275 Learn to use format-patch and send-email if possible. These commands
276 are optimized for the workflow of sending patches, avoiding many ways
277 your existing e-mail client that is optimized for "multipart/*" mime
278 type e-mails to corrupt and render your patches unusable.
280 People on the Git mailing list need to be able to read and
281 comment on the changes you are submitting. It is important for
282 a developer to be able to "quote" your changes, using standard
283 e-mail tools, so that they may comment on specific portions of
284 your code. For this reason, each patch should be submitted
285 "inline" in a separate message.
287 Multiple related patches should be grouped into their own e-mail
288 thread to help readers find all parts of the series. To that end,
289 send them as replies to either an additional "cover letter" message
290 (see below), the first patch, or the respective preceding patch.
292 If your log message (including your name on the
293 `Signed-off-by` trailer) is not writable in ASCII, make sure that
294 you send off a message in the correct encoding.
296 WARNING: Be wary of your MUAs word-wrap
297 corrupting your patch. Do not cut-n-paste your patch; you can
298 lose tabs that way if you are not careful.
300 It is a common convention to prefix your subject line with
301 [PATCH]. This lets people easily distinguish patches from other
302 e-mail discussions. Use of markers in addition to PATCH within
303 the brackets to describe the nature of the patch is also
304 encouraged. E.g. [RFC PATCH] (where RFC stands for "request for
305 comments") is often used to indicate a patch needs further
306 discussion before being accepted, [PATCH v2], [PATCH v3] etc.
307 are often seen when you are sending an update to what you have
310 The `git format-patch` command follows the best current practice to
311 format the body of an e-mail message. At the beginning of the
312 patch should come your commit message, ending with the
313 `Signed-off-by` trailers, and a line that consists of three dashes,
314 followed by the diffstat information and the patch itself. If
315 you are forwarding a patch from somebody else, optionally, at
316 the beginning of the e-mail message just before the commit
317 message starts, you can put a "From: " line to name that person.
318 To change the default "[PATCH]" in the subject to "[<text>]", use
319 `git format-patch --subject-prefix=<text>`. As a shortcut, you
320 can use `--rfc` instead of `--subject-prefix="RFC PATCH"`, or
321 `-v <n>` instead of `--subject-prefix="PATCH v<n>"`.
323 You often want to add additional explanation about the patch,
324 other than the commit message itself. Place such "cover letter"
325 material between the three-dash line and the diffstat. For
326 patches requiring multiple iterations of review and discussion,
327 an explanation of changes between each iteration can be kept in
328 Git-notes and inserted automatically following the three-dash
329 line via `git format-patch --notes`.
332 Do not attach the patch as a MIME attachment, compressed or not.
333 Do not let your e-mail client send quoted-printable. Do not let
334 your e-mail client send format=flowed which would destroy
335 whitespaces in your patches. Many
336 popular e-mail applications will not always transmit a MIME
337 attachment as plain text, making it impossible to comment on
338 your code. A MIME attachment also takes a bit more time to
339 process. This does not decrease the likelihood of your
340 MIME-attached change being accepted, but it makes it more likely
341 that it will be postponed.
343 Exception: If your mailer is mangling patches then someone may ask
344 you to re-send them using MIME, that is OK.
347 Do not PGP sign your patch. Most likely, your maintainer or other people on the
348 list would not have your PGP key and would not bother obtaining it anyway.
349 Your patch is not judged by who you are; a good patch from an unknown origin
350 has a far better chance of being accepted than a patch from a known, respected
351 origin that is done poorly or does incorrect things.
353 If you really really really really want to do a PGP signed
354 patch, format it as "multipart/signed", not a text/plain message
355 that starts with `-----BEGIN PGP SIGNED MESSAGE-----`. That is
356 not a text/plain, it's something else.
358 :security-ml-ref: footnoteref:[security-ml]
360 As mentioned at the beginning of the section, patches that may be
361 security relevant should not be submitted to the public mailing list
362 mentioned below, but should instead be sent privately to the Git
363 Security mailing list{security-ml-ref}.
365 Send your patch with "To:" set to the mailing list, with "cc:" listing
366 people who are involved in the area you are touching (the `git
367 contacts` command in `contrib/contacts/` can help to
368 identify them), to solicit comments and reviews.
370 :current-maintainer: footnote:[The current maintainer: gitster@pobox.com]
371 :git-ml: footnote:[The mailing list: git@vger.kernel.org]
373 After the list reached a consensus that it is a good idea to apply the
374 patch, re-send it with "To:" set to the maintainer{current-maintainer}
375 and "cc:" the list{git-ml} for inclusion. This is especially relevant
376 when the maintainer did not heavily participate in the discussion and
377 instead left the review to trusted others.
379 Do not forget to add trailers such as `Acked-by:`, `Reviewed-by:` and
380 `Tested-by:` lines as necessary to credit people who helped your
381 patch, and "cc:" them when sending such a final version for inclusion.
383 == Subsystems with dedicated maintainers
385 Some parts of the system have dedicated maintainers with their own
388 - `git-gui/` comes from git-gui project, maintained by Pratyush Yadav:
390 https://github.com/prati0100/git-gui.git
392 - `gitk-git/` comes from Paul Mackerras's gitk project:
394 git://ozlabs.org/~paulus/gitk
396 - `po/` comes from the localization coordinator, Jiang Xin:
398 https://github.com/git-l10n/git-po/
400 Patches to these parts should be based on their trees.
403 == An ideal patch flow
405 Here is an ideal patch flow for this project the current maintainer
406 suggests to the contributors:
408 . You come up with an itch. You code it up.
410 . Send it to the list and cc people who may need to know about
413 The people who may need to know are the ones whose code you
414 are butchering. These people happen to be the ones who are
415 most likely to be knowledgeable enough to help you, but
416 they have no obligation to help you (i.e. you ask for help,
417 don't demand). +git log -p {litdd} _$area_you_are_modifying_+ would
418 help you find out who they are.
420 . You get comments and suggestions for improvements. You may
421 even get them in an "on top of your change" patch form.
423 . Polish, refine, and re-send to the list and the people who
424 spend their time to improve your patch. Go back to step (2).
426 . The list forms consensus that the last round of your patch is
427 good. Send it to the maintainer and cc the list.
429 . A topic branch is created with the patch and is merged to `next`,
430 and cooked further and eventually graduates to `master`.
432 In any time between the (2)-(3) cycle, the maintainer may pick it up
433 from the list and queue it to `seen`, in order to make it easier for
434 people play with it without having to pick up and apply the patch to
435 their trees themselves.
438 == Know the status of your patch after submission
440 * You can use Git itself to find out when your patch is merged in
441 master. `git pull --rebase` will automatically skip already-applied
442 patches, and will let you know. This works only if you rebase on top
443 of the branch in which your patch has been merged (i.e. it will not
444 tell you if your patch is merged in `seen` if you rebase on top of
447 * Read the Git mailing list, the maintainer regularly posts messages
448 entitled "What's cooking in git.git" and "What's in git.git" giving
449 the status of various proposed changes.
451 == GitHub CI[[GHCI]]]
453 With an account at GitHub, you can use GitHub CI to test your changes
454 on Linux, Mac and Windows. See
455 https://github.com/git/git/actions/workflows/main.yml for examples of
458 Follow these steps for the initial setup:
460 . Fork https://github.com/git/git to your GitHub account.
461 You can find detailed instructions how to fork here:
462 https://help.github.com/articles/fork-a-repo/
464 After the initial setup, CI will run whenever you push new changes
465 to your fork of Git on GitHub. You can monitor the test state of all your
466 branches here: https://github.com/<Your GitHub handle>/git/actions/workflows/main.yml
468 If a branch did not pass all test cases then it is marked with a red
469 cross. In that case you can click on the failing job and navigate to
470 "ci/run-build-and-tests.sh" and/or "ci/print-test-failures.sh". You
471 can also download "Artifacts" which are tarred (or zipped) archives
472 with test data relevant for debugging.
474 Then fix the problem and push your fix to your GitHub fork. This will
475 trigger a new CI build to ensure all tests pass.
478 == MUA specific hints
480 Some of patches I receive or pick up from the list share common
481 patterns of breakage. Please make sure your MUA is set up
482 properly not to corrupt whitespaces.
484 See the DISCUSSION section of linkgit:git-format-patch[1] for hints on
485 checking your patch by mailing it to yourself and applying with
488 While you are at it, check the resulting commit log message from
489 a trial run of applying the patch. If what is in the resulting
490 commit is not exactly what you would want to see, it is very
491 likely that your maintainer would end up hand editing the log
492 message when he applies your patch. Things like "Hi, this is my
493 first patch.\n", if you really want to put in the patch e-mail,
494 should come after the three-dash line that signals the end of the
500 (Johannes Schindelin)
503 I don't know how many people still use pine, but for those poor
504 souls it may be good to mention that the quell-flowed-text is
505 needed for recent versions.
507 ... the "no-strip-whitespace-before-send" option, too. AFAIK it
508 was introduced in 4.60.
514 And 4.58 needs at least this.
516 diff-tree 8326dd8350be64ac7fc805f6563a1d61ad10d32c (from e886a61f76edf5410573e92e38ce22974f9c40f1)
517 Author: Linus Torvalds <torvalds@g5.osdl.org>
518 Date: Mon Aug 15 17:23:51 2005 -0700
520 Fix pine whitespace-corruption bug
522 There's no excuse for unconditionally removing whitespace from
523 the pico buffers on close.
525 diff --git a/pico/pico.c b/pico/pico.c
528 @@ -219,7 +219,9 @@ PICO *pm;
529 switch(pico_all_done){ /* prepare for/handle final events */
530 case COMP_EXIT : /* already confirmed */
542 > A patch to SubmittingPatches, MUA specific help section for
543 > users of Pine 4.63 would be very much appreciated.
545 Ah, it looks like a recent version changed the default behavior to do the
546 right thing, and inverted the sense of the configuration option. (Either
547 that or Gentoo did it.) So you need to set the
548 "no-strip-whitespace-before-send" option, unless the option you have is
549 "strip-whitespace-before-send", in which case you should avoid checking
553 === Thunderbird, KMail, GMail
555 See the MUA-SPECIFIC HINTS section of linkgit:git-format-patch[1].
559 "|" in the `*Summary*` buffer can be used to pipe the current
560 message to an external program, and this is a handy way to drive
561 `git am`. However, if the message is MIME encoded, what is
562 piped into the program is the representation you see in your
563 `*Article*` buffer after unwrapping MIME. This is often not what
564 you would want for two reasons. It tends to screw up non ASCII
565 characters (most notably in people's names), and also
566 whitespaces (fatal in patches). Running "C-u g" to display the
567 message in raw form before using "|" to run the pipe can work