]> git.ipfire.org Git - thirdparty/git.git/blame - Documentation/SubmittingPatches
Documentation: generated cmds-*.txt does not depend on git.txt
[thirdparty/git.git] / Documentation / SubmittingPatches
CommitLineData
31408251
JH
1I started reading over the SubmittingPatches document for Linux
2kernel, primarily because I wanted to have a document similar to
3it for the core GIT to make sure people understand what they are
4doing when they write "Signed-off-by" line.
5
6But the patch submission requirements are a lot more relaxed
45d2b286
JH
7here on the technical/contents front, because the core GIT is
8thousand times smaller ;-). So here is only the relevant bits.
31408251
JH
9
10
11(1) Make separate commits for logically separate changes.
12
13Unless your patch is really trivial, you should not be sending
14out a patch that was generated between your working tree and
15your commit head. Instead, always make a commit with complete
16commit message and generate a series of patches from your
17repository. It is a good discipline.
18
19Describe the technical detail of the change(s).
20
45d2b286 21If your description starts to get too long, that's a sign that you
31408251
JH
22probably need to split up your commit to finer grained pieces.
23
45d2b286
JH
24Oh, another thing. I am picky about whitespaces. Make sure your
25changes do not trigger errors with the sample pre-commit hook shipped
26in templates/hooks--pre-commit.
31408251 27
31408251 28
45d2b286
JH
29(2) Generate your patch using git tools out of your commits.
30
31git based diff tools (git, Cogito, and StGIT included) generate
32unidiff which is the preferred format.
33
31408251
JH
34You do not have to be afraid to use -M option to "git diff" or
35"git format-patch", if your patch involves file renames. The
36receiving end can handle them just fine.
37
38Please make sure your patch does not include any extra files
39which do not belong in a patch submission. Make sure to review
40your patch after generating it, to ensure accuracy. Before
41sending out, please make sure it cleanly applies to the "master"
45d2b286
JH
42branch head. If you are preparing a work based on "next" branch,
43that is fine, but please mark it as such.
31408251
JH
44
45
46(3) Sending your patches.
47
45d2b286 48People on the git mailing list need to be able to read and
31408251
JH
49comment on the changes you are submitting. It is important for
50a developer to be able to "quote" your changes, using standard
51e-mail tools, so that they may comment on specific portions of
addf88e4 52your code. For this reason, all patches should be submitted
45d2b286
JH
53"inline". WARNING: Be wary of your MUAs word-wrap
54corrupting your patch. Do not cut-n-paste your patch; you can
55lose tabs that way if you are not careful.
31408251 56
45d2b286 57It is a common convention to prefix your subject line with
31408251
JH
58[PATCH]. This lets people easily distinguish patches from other
59e-mail discussions.
60
61"git format-patch" command follows the best current practice to
62format the body of an e-mail message. At the beginning of the
63patch should come your commit message, ending with the
64Signed-off-by: lines, and a line that consists of three dashes,
65followed by the diffstat information and the patch itself. If
66you are forwarding a patch from somebody else, optionally, at
67the beginning of the e-mail message just before the commit
68message starts, you can put a "From: " line to name that person.
69
70You often want to add additional explanation about the patch,
71other than the commit message itself. Place such "cover letter"
72material between the three dash lines and the diffstat.
73
74Do not attach the patch as a MIME attachment, compressed or not.
e30b217b
JH
75Do not let your e-mail client send quoted-printable. Do not let
76your e-mail client send format=flowed which would destroy
77whitespaces in your patches. Many
31408251
JH
78popular e-mail applications will not always transmit a MIME
79attachment as plain text, making it impossible to comment on
80your code. A MIME attachment also takes a bit more time to
81process. This does not decrease the likelihood of your
82MIME-attached change being accepted, but it makes it more likely
83that it will be postponed.
84
85Exception: If your mailer is mangling patches then someone may ask
9847f7e0 86you to re-send them using MIME, that is OK.
31408251 87
9847f7e0
JH
88Do not PGP sign your patch, at least for now. Most likely, your
89maintainer or other people on the list would not have your PGP
90key and would not bother obtaining it anyway. Your patch is not
91judged by who you are; a good patch from an unknown origin has a
92far better chance of being accepted than a patch from a known,
93respected origin that is done poorly or does incorrect things.
94
95If you really really really really want to do a PGP signed
96patch, format it as "multipart/signed", not a text/plain message
97that starts with '-----BEGIN PGP SIGNED MESSAGE-----'. That is
98not a text/plain, it's something else.
99
100Note that your maintainer does not necessarily read everything
101on the git mailing list. If your patch is for discussion first,
102send it "To:" the mailing list, and optionally "cc:" him. If it
103is trivially correct or after the list reached a consensus, send
104it "To:" the maintainer and optionally "cc:" the list.
31408251 105
04d24455
JH
106Also note that your maintainer does not actively involve himself in
107maintaining what are in contrib/ hierarchy. When you send fixes and
108enhancements to them, do not forget to "cc: " the person who primarily
109worked on that hierarchy in contrib/.
110
31408251 111
84ab7b6f 112(4) Sign your work
31408251
JH
113
114To improve tracking of who did what, we've borrowed the
115"sign-off" procedure from the Linux kernel project on patches
116that are being emailed around. Although core GIT is a lot
117smaller project it is a good discipline to follow it.
118
119The sign-off is a simple line at the end of the explanation for
120the patch, which certifies that you wrote it or otherwise have
121the right to pass it on as a open-source patch. The rules are
122pretty simple: if you can certify the below:
123
124 Developer's Certificate of Origin 1.1
125
126 By making a contribution to this project, I certify that:
127
128 (a) The contribution was created in whole or in part by me and I
129 have the right to submit it under the open source license
130 indicated in the file; or
131
132 (b) The contribution is based upon previous work that, to the best
133 of my knowledge, is covered under an appropriate open source
134 license and I have the right under that license to submit that
135 work with modifications, whether created in whole or in part
136 by me, under the same open source license (unless I am
137 permitted to submit under a different license), as indicated
138 in the file; or
139
140 (c) The contribution was provided directly to me by some other
141 person who certified (a), (b) or (c) and I have not modified
142 it.
143
144 (d) I understand and agree that this project and the contribution
145 are public and that a record of the contribution (including all
146 personal information I submit with it, including my sign-off) is
147 maintained indefinitely and may be redistributed consistent with
148 this project or the open source license(s) involved.
149
150then you just add a line saying
151
152 Signed-off-by: Random J Developer <random@developer.example.org>
153
69945602
PC
154This line can be automatically added by git if you run the git-commit
155command with the -s option.
156
31408251
JH
157Some people also put extra tags at the end. They'll just be ignored for
158now, but you can do this to mark internal company procedures or just
159point out some special detail about the sign-off.
9740d289
JH
160
161
162------------------------------------------------
163MUA specific hints
164
165Some of patches I receive or pick up from the list share common
166patterns of breakage. Please make sure your MUA is set up
167properly not to corrupt whitespaces. Here are two common ones
168I have seen:
169
170* Empty context lines that do not have _any_ whitespace.
171
172* Non empty context lines that have one extra whitespace at the
173 beginning.
174
9847f7e0
JH
175One test you could do yourself if your MUA is set up correctly is:
176
177* Send the patch to yourself, exactly the way you would, except
178 To: and Cc: lines, which would not contain the list and
179 maintainer address.
180
181* Save that patch to a file in UNIX mailbox format. Call it say
182 a.patch.
183
184* Try to apply to the tip of the "master" branch from the
185 git.git public repository:
186
187 $ git fetch http://kernel.org/pub/scm/git/git.git master:test-apply
188 $ git checkout test-apply
189 $ git reset --hard
190 $ git applymbox a.patch
191
192If it does not apply correctly, there can be various reasons.
193
194* Your patch itself does not apply cleanly. That is _bad_ but
195 does not have much to do with your MUA. Please rebase the
196 patch appropriately.
197
198* Your MUA corrupted your patch; applymbox would complain that
199 the patch does not apply. Look at .dotest/ subdirectory and
200 see what 'patch' file contains and check for the common
201 corruption patterns mentioned above.
202
203* While you are at it, check what are in 'info' and
204 'final-commit' files as well. If what is in 'final-commit' is
205 not exactly what you would want to see in the commit log
206 message, it is very likely that your maintainer would end up
207 hand editing the log message when he applies your patch.
208 Things like "Hi, this is my first patch.\n", if you really
209 want to put in the patch e-mail, should come after the
210 three-dash line that signals the end of the commit message.
211
9740d289
JH
212
213Pine
214----
215
216(Johannes Schindelin)
217
218I don't know how many people still use pine, but for those poor
219souls it may be good to mention that the quell-flowed-text is
220needed for recent versions.
221
222... the "no-strip-whitespace-before-send" option, too. AFAIK it
223was introduced in 4.60.
224
225(Linus Torvalds)
226
227And 4.58 needs at least this.
228
229---
230diff-tree 8326dd8350be64ac7fc805f6563a1d61ad10d32c (from e886a61f76edf5410573e92e38ce22974f9c40f1)
231Author: Linus Torvalds <torvalds@g5.osdl.org>
232Date: Mon Aug 15 17:23:51 2005 -0700
233
234 Fix pine whitespace-corruption bug
235
236 There's no excuse for unconditionally removing whitespace from
237 the pico buffers on close.
238
239diff --git a/pico/pico.c b/pico/pico.c
240--- a/pico/pico.c
241+++ b/pico/pico.c
242@@ -219,7 +219,9 @@ PICO *pm;
243 switch(pico_all_done){ /* prepare for/handle final events */
244 case COMP_EXIT : /* already confirmed */
245 packheader();
246+#if 0
247 stripwhitespace();
248+#endif
249 c |= COMP_EXIT;
250 break;
251
252
1eb446fa
JH
253(Daniel Barkalow)
254
255> A patch to SubmittingPatches, MUA specific help section for
256> users of Pine 4.63 would be very much appreciated.
257
258Ah, it looks like a recent version changed the default behavior to do the
259right thing, and inverted the sense of the configuration option. (Either
260that or Gentoo did it.) So you need to set the
261"no-strip-whitespace-before-send" option, unless the option you have is
262"strip-whitespace-before-send", in which case you should avoid checking
263it.
264
9740d289
JH
265
266Thunderbird
267-----------
268
269(A Large Angry SCM)
270
271Here are some hints on how to successfully submit patches inline using
cf6de18a 272Thunderbird.
9740d289
JH
273
274This recipe appears to work with the current [*1*] Thunderbird from Suse.
275
276The following Thunderbird extensions are needed:
277 AboutConfig 0.5
278 http://aboutconfig.mozdev.org/
ff62b7f3
LS
279 External Editor 0.7.2
280 http://globs.org/articles.php?lng=en&pg=8
9740d289
JH
281
2821) Prepare the patch as a text file using your method of choice.
283
2842) Before opening a compose window, use Edit->Account Settings to
285uncheck the "Compose messages in HTML format" setting in the
286"Composition & Addressing" panel of the account to be used to send the
287patch. [*2*]
288
2893) In the main Thunderbird window, _before_ you open the compose window
290for the patch, use Tools->about:config to set the following to the
291indicated values:
292 mailnews.send_plaintext_flowed => false
cf6de18a 293 mailnews.wraplength => 0
9740d289
JH
294
2954) Open a compose window and click the external editor icon.
296
2975) In the external editor window, read in the patch file and exit the
298editor normally.
299
3006) Back in the compose window: Add whatever other text you wish to the
301message, complete the addressing and subject fields, and press send.
302
3037) Optionally, undo the about:config/account settings changes made in
304steps 2 & 3.
305
306
307[Footnotes]
308*1* Version 1.0 (20041207) from the MozillaThunderbird-1.0-5 rpm of Suse
3099.3 professional updates.
310
311*2* It may be possible to do this with about:config and the following
312settings but I haven't tried, yet.
313 mail.html_compose => false
314 mail.identity.default.compose_html => false
315 mail.identity.id?.compose_html => false
316
e30b217b
JH
317
318
319Gnus
320----
321
322'|' in the *Summary* buffer can be used to pipe the current
323message to an external program, and this is a handy way to drive
324"git am". However, if the message is MIME encoded, what is
325piped into the program is the representation you see in your
326*Article* buffer after unwrapping MIME. This is often not what
327you would want for two reasons. It tends to screw up non ASCII
328characters (most notably in people's names), and also
329whitespaces (fatal in patches). Running 'C-u g' to display the
330message in raw form before using '|' to run the pipe can work
331this problem around.
332