162306a36Sopenharmony_ciNOTE:
262306a36Sopenharmony_ciThis is a version of Documentation/process/submitting-patches.rst into Japanese.
362306a36Sopenharmony_ciThis document is maintained by Keiichi KII <k-keiichi@bx.jp.nec.com>
462306a36Sopenharmony_ciand the JF Project team <http://www.linux.or.jp/JF/>.
562306a36Sopenharmony_ciIf you find any difference between this document and the original file
662306a36Sopenharmony_cior a problem with the translation,
762306a36Sopenharmony_ciplease contact the maintainer of this file or JF project.
862306a36Sopenharmony_ci
962306a36Sopenharmony_ciPlease also note that the purpose of this file is to be easier to read
1062306a36Sopenharmony_cifor non English (read: Japanese) speakers and is not intended as a
1162306a36Sopenharmony_cifork. So if you have any comments or updates of this file, please try
1262306a36Sopenharmony_cito update the original English file first.
1362306a36Sopenharmony_ci
1462306a36Sopenharmony_ciLast Updated: 2011/06/09
1562306a36Sopenharmony_ci
1662306a36Sopenharmony_ci==================================
1762306a36Sopenharmony_ciこれは、
1862306a36Sopenharmony_cilinux-2.6.39/Documentation/process/submitting-patches.rst の和訳
1962306a36Sopenharmony_ciです。
2062306a36Sopenharmony_ci翻訳団体: JF プロジェクト < http://www.linux.or.jp/JF/ >
2162306a36Sopenharmony_ci翻訳日: 2011/06/09
2262306a36Sopenharmony_ci翻訳者: Keiichi Kii <k-keiichi at bx dot jp dot nec dot com>
2362306a36Sopenharmony_ci校正者: Masanari Kobayashi さん <zap03216 at nifty dot ne dot jp>
2462306a36Sopenharmony_ci         Matsukura さん <nbh--mats at nifty dot com>
2562306a36Sopenharmony_ci         Takeshi Hamasaki さん <hmatrjp at users dot sourceforge dot jp>
2662306a36Sopenharmony_ci==================================
2762306a36Sopenharmony_ci
2862306a36Sopenharmony_ci        Linux カーネルに変更を加えるための Howto
2962306a36Sopenharmony_ci        又は
3062306a36Sopenharmony_ci        かの Linus Torvalds の取り扱い説明書
3162306a36Sopenharmony_ci
3262306a36Sopenharmony_ciLinux カーネルに変更を加えたいと思っている個人又は会社にとって、パッ
3362306a36Sopenharmony_ciチの投稿に関連した仕組みに慣れていなければ、その過程は時々みなさんを
3462306a36Sopenharmony_ciおじけづかせることもあります。この文章はあなたの変更を大いに受け入れ
3562306a36Sopenharmony_ciてもらえやすくする提案を集めたものです。
3662306a36Sopenharmony_ci
3762306a36Sopenharmony_ciコードを投稿する前に、Documentation/process/submit-checklist.rst の項目リストに目
3862306a36Sopenharmony_ciを通してチェックしてください。
3962306a36Sopenharmony_ci
4062306a36Sopenharmony_ci--------------------------------------------
4162306a36Sopenharmony_ciセクション1 パッチの作り方と送り方
4262306a36Sopenharmony_ci--------------------------------------------
4362306a36Sopenharmony_ci
4462306a36Sopenharmony_ci1) 「 diff -up 」
4562306a36Sopenharmony_ci------------
4662306a36Sopenharmony_ci
4762306a36Sopenharmony_ciパッチの作成には「 diff -up 」又は「 diff -uprN 」を使ってください。
4862306a36Sopenharmony_ci
4962306a36Sopenharmony_ciLinux カーネルに対する全ての変更は diff(1) コマンドによるパッチの形式で
5062306a36Sopenharmony_ci生成してください。パッチを作成するときには、diff(1) コマンドに「 -u 」引
5162306a36Sopenharmony_ci数を指定して、unified 形式のパッチを作成することを確認してください。また、
5262306a36Sopenharmony_ci変更がどの C 関数で行われたのかを表示する「 -p 」引数を使ってください。
5362306a36Sopenharmony_ciこの引数は生成した差分をずっと読みやすくしてくれます。パッチは Linux
5462306a36Sopenharmony_ciカーネルソースの中のサブディレクトリではなく Linux カーネルソースのルート
5562306a36Sopenharmony_ciディレクトリを基準にしないといけません。
5662306a36Sopenharmony_ci
5762306a36Sopenharmony_ci1個のファイルについてのパッチを作成するためには、ほとんどの場合、
5862306a36Sopenharmony_ci以下の作業を行えば十分です。
5962306a36Sopenharmony_ci
6062306a36Sopenharmony_ci	SRCTREE=linux-2.6
6162306a36Sopenharmony_ci	MYFILE=drivers/net/mydriver.c
6262306a36Sopenharmony_ci
6362306a36Sopenharmony_ci	cd $SRCTREE
6462306a36Sopenharmony_ci	cp $MYFILE $MYFILE.orig
6562306a36Sopenharmony_ci	vi $MYFILE	# make your change
6662306a36Sopenharmony_ci	cd ..
6762306a36Sopenharmony_ci	diff -up $SRCTREE/$MYFILE{.orig,} > /tmp/patch
6862306a36Sopenharmony_ci
6962306a36Sopenharmony_ci複数のファイルについてのパッチを作成するためには、素の( vanilla )、す
7062306a36Sopenharmony_ciなわち変更を加えてない Linux カーネルを展開し、自分の Linux カーネル
7162306a36Sopenharmony_ciソースとの差分を生成しないといけません。例えば、
7262306a36Sopenharmony_ci
7362306a36Sopenharmony_ci	MYSRC=/devel/linux-2.6
7462306a36Sopenharmony_ci
7562306a36Sopenharmony_ci	tar xvfz linux-2.6.12.tar.gz
7662306a36Sopenharmony_ci	mv linux-2.6.12 linux-2.6.12-vanilla
7762306a36Sopenharmony_ci	diff -uprN -X linux-2.6.12-vanilla/Documentation/dontdiff \
7862306a36Sopenharmony_ci		linux-2.6.12-vanilla $MYSRC > /tmp/patch
7962306a36Sopenharmony_ci
8062306a36Sopenharmony_cidontdiff ファイルには Linux カーネルのビルドプロセスの過程で生成された
8162306a36Sopenharmony_ciファイルの一覧がのっています。そして、それらはパッチを生成する diff(1)
8262306a36Sopenharmony_ciコマンドで無視されるべきです。dontdiff ファイルは 2.6.12 以後のバージョ
8362306a36Sopenharmony_ciンの Linux カーネルソースツリーに含まれています。
8462306a36Sopenharmony_ci
8562306a36Sopenharmony_ci投稿するパッチの中に関係のない余分なファイルが含まれていないことを確
8662306a36Sopenharmony_ci認してください。diff(1) コマンドで生成したパッチがあなたの意図したとお
8762306a36Sopenharmony_ciりのものであることを確認してください。
8862306a36Sopenharmony_ci
8962306a36Sopenharmony_ciもしあなたのパッチが多くの差分を生み出すのであれば、あなたはパッチ
9062306a36Sopenharmony_ciを意味のあるひとまとまりごとに分けたいと思うかもしれません。
9162306a36Sopenharmony_ciこれは他のカーネル開発者にとってレビューしやすくなるので、あなたの
9262306a36Sopenharmony_ciパッチを受け入れてもらうためにはとても重要なことです。これを補助でき
9362306a36Sopenharmony_ciる多くのスクリプトがあります。
9462306a36Sopenharmony_ci
9562306a36Sopenharmony_ciQuilt:
9662306a36Sopenharmony_cihttp://savannah.nongnu.org/projects/quilt
9762306a36Sopenharmony_ci
9862306a36Sopenharmony_ci2) パッチに対する説明
9962306a36Sopenharmony_ci
10062306a36Sopenharmony_ciパッチの中の変更点に対する技術的な詳細について説明してください。
10162306a36Sopenharmony_ci
10262306a36Sopenharmony_ci説明はできる限り具体的に。もっとも悪い説明は「ドライバー X を更新」、
10362306a36Sopenharmony_ci「ドライバー X に対するバグフィックス」あるいは「このパッチはサブシス
10462306a36Sopenharmony_ciテム X に対する更新を含んでいます。どうか取り入れてください。」などです。
10562306a36Sopenharmony_ci
10662306a36Sopenharmony_ciパッチの説明を Linux カーネルのソースコードマネジメントシステム「 git 」の
10762306a36Sopenharmony_ciコミットログとして簡単に引用できる形で書けば、メンテナから感謝されるでしょう。
10862306a36Sopenharmony_ci以下の #15 を見てください。
10962306a36Sopenharmony_ci
11062306a36Sopenharmony_ci説明が長くなりだしたのであれば、おそらくそれはパッチを分ける必要がある
11162306a36Sopenharmony_ciという兆候です。次の #3 を見てください。
11262306a36Sopenharmony_ci
11362306a36Sopenharmony_ciパッチ(シリーズ)を(再)投稿する時、十分なパッチの説明とそのパッチが必要な理由を
11462306a36Sopenharmony_ciパッチに含めてください。ただ「これはパッチ(シリーズ)のバージョン N」とだけ
11562306a36Sopenharmony_ci書かないでください。そして、パッチをマージする人にパッチの説明を探させそれを
11662306a36Sopenharmony_ciパッチに追記させるため、過去のバージョンのパッチやそのパッチの URL を参照する
11762306a36Sopenharmony_ci手間をかけさせないでください。
11862306a36Sopenharmony_ciつまり、パッチシリーズとその説明は一緒にあるべきです。これはパッチをマージする
11962306a36Sopenharmony_ci人、レビューする人、どちらのためにもなります。レビューする人の中には、おそらく
12062306a36Sopenharmony_ci過去のバージョンのパッチを受け取ってもいない人がいます。
12162306a36Sopenharmony_ci
12262306a36Sopenharmony_ci登録済みのバグエントリを修正するパッチであれば、そのバグエントリを示すバグ ID
12362306a36Sopenharmony_ciや URL を明記してください。
12462306a36Sopenharmony_ci
12562306a36Sopenharmony_ci特定のコミットを参照したい場合は、その SHA-1 ID だけでなく、一行サマリ
12662306a36Sopenharmony_ciも含めてください。それにより、それが何に関するコミットなのかがレビューする
12762306a36Sopenharmony_ci人にわかりやすくなります。
12862306a36Sopenharmony_ci例 (英文のママ):
12962306a36Sopenharmony_ci
13062306a36Sopenharmony_ci       Commit e21d2170f36602ae2708 ("video: remove unnecessary
13162306a36Sopenharmony_ci       platform_set_drvdata()") removed the unnecessary
13262306a36Sopenharmony_ci       platform_set_drvdata(), but left the variable "dev" unused,
13362306a36Sopenharmony_ci       delete it.
13462306a36Sopenharmony_ci
13562306a36Sopenharmony_ci
13662306a36Sopenharmony_ci3) パッチの分割
13762306a36Sopenharmony_ci
13862306a36Sopenharmony_ci意味のあるひとまとまりごとに変更を個々のパッチファイルに分けてください。
13962306a36Sopenharmony_ci
14062306a36Sopenharmony_ci例えば、もし1つのドライバーに対するバグフィックスとパフォーマンス強
14162306a36Sopenharmony_ci化の両方の変更を含んでいるのであれば、その変更を2つ以上のパッチに分
14262306a36Sopenharmony_ciけてください。もし変更箇所に API の更新と、その新しい API を使う新たな
14362306a36Sopenharmony_ciドライバーが含まれているなら、2つのパッチに分けてください。
14462306a36Sopenharmony_ci
14562306a36Sopenharmony_ci一方で、もしあなたが多数のファイルに対して意味的に同じ1つの変更を加え
14662306a36Sopenharmony_ciるのであれば、その変更を1つのパッチにまとめてください。言いかえると、
14762306a36Sopenharmony_ci意味的に同じ1つの変更は1つのパッチの中に含まれます。
14862306a36Sopenharmony_ci
14962306a36Sopenharmony_ciあるパッチが変更を完結させるために他のパッチに依存していたとしても、
15062306a36Sopenharmony_ciそれは問題ありません。パッチの説明の中で「このパッチはパッチ X に依存
15162306a36Sopenharmony_ciしている」と簡単に注意書きをつけてください。
15262306a36Sopenharmony_ci
15362306a36Sopenharmony_ciもしパッチをより小さなパッチの集合に凝縮することができないなら、まずは
15462306a36Sopenharmony_ci15かそこらのパッチを送り、そのレビューと統合を待って下さい。
15562306a36Sopenharmony_ci
15662306a36Sopenharmony_ci4) パッチのスタイルチェック
15762306a36Sopenharmony_ci
15862306a36Sopenharmony_ciあなたのパッチが基本的な( Linux カーネルの)コーディングスタイルに違反し
15962306a36Sopenharmony_ciていないかをチェックして下さい。その詳細を Documentation/process/coding-style.rst16062306a36Sopenharmony_ci見つけることができます。コーディングスタイルの違反はレビューする人の
16162306a36Sopenharmony_ci時間を無駄にするだけなので、恐らくあなたのパッチは読まれることすらなく
16262306a36Sopenharmony_ci拒否されるでしょう。
16362306a36Sopenharmony_ci
16462306a36Sopenharmony_ciあなたはパッチを投稿する前に最低限パッチスタイルチェッカー
16562306a36Sopenharmony_ci( scripts/checkpatch.pl )を利用してパッチをチェックすべきです。
16662306a36Sopenharmony_ciもしパッチに違反がのこっているならば、それらの全てについてあなたは正当な
16762306a36Sopenharmony_ci理由を示せるようにしておく必要があります。
16862306a36Sopenharmony_ci
16962306a36Sopenharmony_ci5) 電子メールの宛先の選び方
17062306a36Sopenharmony_ci
17162306a36Sopenharmony_ciMAINTAINERS ファイルとソースコードに目を通してください。そして、その変
17262306a36Sopenharmony_ci更がメンテナのいる特定のサブシステムに加えられるものであることが分か
17362306a36Sopenharmony_ciれば、その人に電子メールを送ってください。その際
17462306a36Sopenharmony_ci./scripts/get_maintainers.pl のスクリプトが有用です。
17562306a36Sopenharmony_ci
17662306a36Sopenharmony_ciもし、メンテナが載っていなかったり、メンテナからの応答がないなら、
17762306a36Sopenharmony_ciLKML ( linux-kernel@vger.kernel.org )へパッチを送ってください。ほとんど
17862306a36Sopenharmony_ciのカーネル開発者はこのメーリングリストに目を通しており、変更に対して
17962306a36Sopenharmony_ciコメントを得ることができます。
18062306a36Sopenharmony_ci
18162306a36Sopenharmony_ci15個より多くのパッチを同時に vger.kernel.org のメーリングリストへ送らな
18262306a36Sopenharmony_ciいでください!!!
18362306a36Sopenharmony_ci
18462306a36Sopenharmony_ciLinus Torvalds は Linux カーネルに入る全ての変更に対する最終的な意思決定者
18562306a36Sopenharmony_ciです。電子メールアドレスは torvalds@linux-foundation.org になります。彼は
18662306a36Sopenharmony_ci多くの電子メールを受け取っているため、できる限り彼に電子メールを送るのは
18762306a36Sopenharmony_ci避けるべきです。
18862306a36Sopenharmony_ci
18962306a36Sopenharmony_ciバグフィックスであったり、自明な変更であったり、話し合いをほとんど
19062306a36Sopenharmony_ci必要としないパッチは Linus へ電子メールを送るか CC しなければなりません。
19162306a36Sopenharmony_ci話し合いを必要としたり、明確なアドバンテージがないパッチは、通常まず
19262306a36Sopenharmony_ciは LKML へ送られるべきです。パッチが議論された後にだけ、そのパッチを
19362306a36Sopenharmony_ciLinus へ送るべきです。
19462306a36Sopenharmony_ci
19562306a36Sopenharmony_ci6) CC (カーボンコピー)先の選び方
19662306a36Sopenharmony_ci
19762306a36Sopenharmony_ci特に理由がないなら、LKML にも CC してください。
19862306a36Sopenharmony_ci
19962306a36Sopenharmony_ciLinus 以外のカーネル開発者は変更に気づく必要があり、その結果、彼らはそ
20062306a36Sopenharmony_ciの変更に対してコメントをくれたり、コードに対してレビューや提案をくれ
20162306a36Sopenharmony_ciるかもしれません。LKML とは Linux カーネル開発者にとって一番中心的なメー
20262306a36Sopenharmony_ciリングリストです。USB やフレームバッファデバイスや VFS や SCSI サブシステ
20362306a36Sopenharmony_ciムなどの特定のサブシステムに関するメーリングリストもあります。あなた
20462306a36Sopenharmony_ciの変更に、はっきりと関連のあるメーリングリストについて知りたければ
20562306a36Sopenharmony_ciMAINTAINERS ファイルを参照してください。
20662306a36Sopenharmony_ci
20762306a36Sopenharmony_ciVGER.KERNEL.ORG でホスティングされているメーリングリストの一覧が下記の
20862306a36Sopenharmony_ciサイトに載っています。
20962306a36Sopenharmony_ci<http://vger.kernel.org/vger-lists.html>
21062306a36Sopenharmony_ci
21162306a36Sopenharmony_ciもし、変更がユーザランドのカーネルインタフェースに影響を与え
21262306a36Sopenharmony_ciるのであれば、MAN-PAGES のメンテナ( MAINTAINERS ファイルに一覧
21362306a36Sopenharmony_ciがあります)に man ページのパッチを送ってください。少なくとも
21462306a36Sopenharmony_ci情報がマニュアルページの中に入ってくるように、変更が起きたという
21562306a36Sopenharmony_ci通知を送ってください。
21662306a36Sopenharmony_ci
21762306a36Sopenharmony_ciたとえ、メンテナが #5 で反応がなかったとしても、メンテナのコードに変更を
21862306a36Sopenharmony_ci加えたときには、いつもメンテナに CC するのを忘れないようにしてください。
21962306a36Sopenharmony_ci
22062306a36Sopenharmony_ci
22162306a36Sopenharmony_ci7) MIME やリンクや圧縮ファイルや添付ファイルではなくプレインテキストのみ
22262306a36Sopenharmony_ci
22362306a36Sopenharmony_ciLinus や他のカーネル開発者はあなたが投稿した変更を読んで、コメントでき
22462306a36Sopenharmony_ciる必要があります。カーネル開発者にとって、あなたが書いたコードの特定の
22562306a36Sopenharmony_ci部分にコメントをするために、標準的な電子メールクライアントで変更が引用
22662306a36Sopenharmony_ciできることは重要です。
22762306a36Sopenharmony_ci
22862306a36Sopenharmony_ci上記の理由で、すべてのパッチは文中に含める形式の電子メールで投稿さ
22962306a36Sopenharmony_ciれるべきです。警告:あなたがパッチをコピー&ペーストする際には、パッ
23062306a36Sopenharmony_ciチを改悪するエディターの折り返し機能に注意してください。
23162306a36Sopenharmony_ci
23262306a36Sopenharmony_ciパッチを圧縮の有無に関わらず MIME 形式で添付しないでください。多くのポ
23362306a36Sopenharmony_ciピュラーな電子メールクライアントは MIME 形式の添付ファイルをプレーンテ
23462306a36Sopenharmony_ciキストとして送信するとは限らないでしょう。そうなると、電子メールクラ
23562306a36Sopenharmony_ciイアントがコードに対するコメントを付けることをできなくします。また、
23662306a36Sopenharmony_ciMIME 形式の添付ファイルは Linus に手間を取らせることになり、その変更を
23762306a36Sopenharmony_ci受け入れてもらう可能性が低くなってしまいます。
23862306a36Sopenharmony_ci
23962306a36Sopenharmony_ci例外:お使いの電子メールクライアントがパッチをめちゃくちゃにするので
24062306a36Sopenharmony_ciあれば、誰かが MIME 形式のパッチを再送するよう求めるかもしれません。
24162306a36Sopenharmony_ci
24262306a36Sopenharmony_ci余計な変更を加えずにあなたのパッチを送信するための電子メールクライアントの設定
24362306a36Sopenharmony_ciのヒントについては Documentation/process/email-clients.rst を参照してください。
24462306a36Sopenharmony_ci
24562306a36Sopenharmony_ci8) 電子メールのサイズ
24662306a36Sopenharmony_ci
24762306a36Sopenharmony_ciパッチを Linus へ送るときは常に #7 の手順に従ってください。
24862306a36Sopenharmony_ci
24962306a36Sopenharmony_ci大きなパッチはメーリングリストやメンテナにとって不親切です。パッチが
25062306a36Sopenharmony_ci未圧縮で 300KB を超えるようであるなら、インターネット上のアクセス可能な
25162306a36Sopenharmony_ciサーバに保存し、保存場所を示す URL を伝えるほうが適切です。
25262306a36Sopenharmony_ci
25362306a36Sopenharmony_ci9) カーネルバージョンの明記
25462306a36Sopenharmony_ci
25562306a36Sopenharmony_ciパッチが対象とするカーネルのバージョンをパッチの概要か電子メールの
25662306a36Sopenharmony_ciサブジェクトに付けることが重要です。
25762306a36Sopenharmony_ci
25862306a36Sopenharmony_ciパッチが最新バージョンのカーネルに正しく適用できなければ、Linus は
25962306a36Sopenharmony_ciそのパッチを採用しないでしょう。
26062306a36Sopenharmony_ci
26162306a36Sopenharmony_ci10) がっかりせず再投稿
26262306a36Sopenharmony_ci
26362306a36Sopenharmony_ciパッチを投稿した後は、辛抱強く待っていてください。Linus があなたのパッ
26462306a36Sopenharmony_ciチを気に入って採用すれば、Linus がリリースする次のバージョンのカーネル
26562306a36Sopenharmony_ciの中で姿を見せるでしょう。
26662306a36Sopenharmony_ci
26762306a36Sopenharmony_ciしかし、パッチが次のバージョンのカーネルに入っていないなら、いくつもの
26862306a36Sopenharmony_ci理由があるのでしょう。その原因を絞り込み、間違っているものを正し、更新
26962306a36Sopenharmony_ciしたパッチを投稿するのはあなたの仕事です。
27062306a36Sopenharmony_ci
27162306a36Sopenharmony_ciLinus があなたのパッチに対して何のコメントもなく不採用にすることは極め
27262306a36Sopenharmony_ciて普通のことです。それは自然な姿です。もし、Linus があなたのパッチを受
27362306a36Sopenharmony_ciけ取っていないのであれば、以下の理由が考えられます。
27462306a36Sopenharmony_ci* パッチが最新バージョンの Linux カーネルにきちんと適用できなかった
27562306a36Sopenharmony_ci* パッチが LKML で十分に議論されていなかった
27662306a36Sopenharmony_ci* スタイルの問題(セクション2を参照)
27762306a36Sopenharmony_ci* 電子メールフォーマットの問題(このセクションを参照)
27862306a36Sopenharmony_ci* パッチに対する技術的な問題
27962306a36Sopenharmony_ci* Linus はたくさんの電子メールを受け取っているので、どさくさに紛れて見
28062306a36Sopenharmony_ci  失った
28162306a36Sopenharmony_ci* 不愉快にさせている
28262306a36Sopenharmony_ci
28362306a36Sopenharmony_ci判断できない場合は、LKML にコメントを頼んでください。
28462306a36Sopenharmony_ci
28562306a36Sopenharmony_ci11) サブジェクトに「 PATCH 」
28662306a36Sopenharmony_ci
28762306a36Sopenharmony_ciLinus や LKML への大量の電子メールのために、サブジェクトのプレフィックスに
28862306a36Sopenharmony_ci「 [PATCH] 」を付けることが慣習となっています。これによって Linus や他の
28962306a36Sopenharmony_ciカーネル開発者がパッチであるのか、又は、他の議論に関する電子メールであるの
29062306a36Sopenharmony_ciかをより簡単に識別できます。
29162306a36Sopenharmony_ci
29262306a36Sopenharmony_ci12) パッチへの署名
29362306a36Sopenharmony_ci
29462306a36Sopenharmony_ci誰が何をしたのかを追いかけやすくするために (特に、パッチが何人かの
29562306a36Sopenharmony_ciメンテナを経て最終的に Linux カーネルに取り込まれる場合のために)、電子
29662306a36Sopenharmony_ciメールでやり取りされるパッチに対して「 sign-off 」という手続きを導入し
29762306a36Sopenharmony_ciました。
29862306a36Sopenharmony_ci
29962306a36Sopenharmony_ci「 sign-off 」とは、パッチがあなたの書いたものであるか、あるいは、
30062306a36Sopenharmony_ciあなたがそのパッチをオープンソースとして提供する権利を保持している、
30162306a36Sopenharmony_ciという証明をパッチの説明の末尾に一行記載するというものです。
30262306a36Sopenharmony_ciルールはとても単純です。以下の項目を確認して下さい。
30362306a36Sopenharmony_ci
30462306a36Sopenharmony_ci        原作者の証明書( DCO ) 1.1
30562306a36Sopenharmony_ci
30662306a36Sopenharmony_ci        このプロジェクトに寄与するものとして、以下のことを証明する。
30762306a36Sopenharmony_ci
30862306a36Sopenharmony_ci        (a) 本寄与は私が全体又は一部作成したものであり、私がそのファイ
30962306a36Sopenharmony_ci            ル中に明示されたオープンソースライセンスの下で公開する権利
31062306a36Sopenharmony_ci            を持っている。もしくは、
31162306a36Sopenharmony_ci
31262306a36Sopenharmony_ci        (b) 本寄与は、私が知る限り、適切なオープンソースライセンスでカバ
31362306a36Sopenharmony_ci            ーされている既存の作品を元にしている。同時に、私はそのライセ
31462306a36Sopenharmony_ci            ンスの下で、私が全体又は一部作成した修正物を、ファイル中で示
31562306a36Sopenharmony_ci            される同一のオープンソースライセンスで(異なるライセンスの下で
31662306a36Sopenharmony_ci            投稿することが許可されている場合を除いて)投稿する権利を持って
31762306a36Sopenharmony_ci            いる。もしくは、
31862306a36Sopenharmony_ci
31962306a36Sopenharmony_ci        (c) 本寄与は(a)、(b)、(c)を証明する第3者から私へ直接提供された
32062306a36Sopenharmony_ci            ものであり、私はそれに変更を加えていない。
32162306a36Sopenharmony_ci
32262306a36Sopenharmony_ci        (d) 私はこのプロジェクトと本寄与が公のものであることに理解及び同意す
32362306a36Sopenharmony_ci            る。同時に、関与した記録(投稿の際の全ての個人情報と sign-off を
32462306a36Sopenharmony_ci            含む)が無期限に保全されることと、当該プロジェクト又は関連する
32562306a36Sopenharmony_ci            オープンソースライセンスに沿った形で再配布されることに理解及び
32662306a36Sopenharmony_ci            同意する。
32762306a36Sopenharmony_ci
32862306a36Sopenharmony_ciもしこれに同意できるなら、以下のような1行を追加してください。
32962306a36Sopenharmony_ci
33062306a36Sopenharmony_ci	Signed-off-by: Random J Developer <random@developer.example.org>
33162306a36Sopenharmony_ci
33262306a36Sopenharmony_ci実名を使ってください。(残念ですが、偽名や匿名による寄与はできません。)
33362306a36Sopenharmony_ci
33462306a36Sopenharmony_ci人によっては sign-off の近くに追加のタグを付加しています。それらは今のところ
33562306a36Sopenharmony_ci無視されますが、あなたはそのタグを社内の手続きに利用したり、sign-off に特別
33662306a36Sopenharmony_ciな情報を示したりすることができます。
33762306a36Sopenharmony_ci
33862306a36Sopenharmony_ciあなたがサブシステムまたはブランチのメンテナであれば、受け取ったパッチを自身の
33962306a36Sopenharmony_ciツリーにマージするために、わずかに変更が必要となる場合があります。なぜなら
34062306a36Sopenharmony_ciあなたのツリーの中のコードと投稿者のツリーの中のコードは同一ではないためです。
34162306a36Sopenharmony_ciもし、あなたが厳密に上記ルール(c)にこだわるのであれば、投稿者に再度差分を
34262306a36Sopenharmony_ciとるよう依頼すべきです。しかし、これは時間とエネルギーを非生産的に浪費する
34362306a36Sopenharmony_ciことになります。ルール(b)はあなたにコードを修正する権利を与えてくれます。
34462306a36Sopenharmony_ciしかし、投稿者のコードを修正し、その修正によるバグを投稿者に押し付けてしまう
34562306a36Sopenharmony_ciことはとても失礼なことです。この問題を解決するために、末尾の投稿者の
34662306a36Sopenharmony_ciSigned-off-by とあなたがその末尾に追加する Signed-off-by の間に、修正を
34762306a36Sopenharmony_ci加えたことを示す1行を追加することが推奨されています。
34862306a36Sopenharmony_ci(その1行の書き方に)決まりはありませんが、大括弧の中に電子メールアドレスや氏名
34962306a36Sopenharmony_ciと修正内容を記載するやり方は目につきやすく、最終段階での変更の責任があなたに
35062306a36Sopenharmony_ciあることを明確にするのに十分な方法のようです。例えば、
35162306a36Sopenharmony_ci
35262306a36Sopenharmony_ci	Signed-off-by: Random J Developer <random@developer.example.org>
35362306a36Sopenharmony_ci	[lucky@maintainer.example.org: struct foo moved from foo.c to foo.h]
35462306a36Sopenharmony_ci	Signed-off-by: Lucky K Maintainer <lucky@maintainer.example.org>
35562306a36Sopenharmony_ci
35662306a36Sopenharmony_ciあなたが安定版のブランチを管理しており、作成者のクレジット、変更の追跡、
35762306a36Sopenharmony_ci修正のマージ、と同時に苦情からの投稿者の保護を行いたい場合、この慣習は特に
35862306a36Sopenharmony_ci有用となります。いかなる事情があってもチェンジログに出てくる作成者の
35962306a36Sopenharmony_ciアイデンティティ情報(From ヘッダ)は変更できないことに注意してください。
36062306a36Sopenharmony_ci
36162306a36Sopenharmony_ciバックポートする人のための特別な注意事項。追跡を容易に行うために、コミット
36262306a36Sopenharmony_ciメッセージのトップ(サブジェクト行のすぐ後)にパッチの起源を示す情報を記述する
36362306a36Sopenharmony_ciことは一般的で有用な慣習です。例えば、これは 2.6-stable ツリーでの一例です。    
36462306a36Sopenharmony_ci
36562306a36Sopenharmony_ci    Date:   Tue May 13 19:10:30 2008 +0000
36662306a36Sopenharmony_ci
36762306a36Sopenharmony_ci        SCSI: libiscsi regression in 2.6.25: fix nop timer handling
36862306a36Sopenharmony_ci
36962306a36Sopenharmony_ci        commit 4cf1043593db6a337f10e006c23c69e5fc93e722 upstream
37062306a36Sopenharmony_ci
37162306a36Sopenharmony_ciそして、これは 2.4 ツリーでの一例です。
37262306a36Sopenharmony_ci
37362306a36Sopenharmony_ci    Date:   Tue May 13 22:12:27 2008 +0200
37462306a36Sopenharmony_ci
37562306a36Sopenharmony_ci        wireless, airo: waitbusy() won't delay
37662306a36Sopenharmony_ci
37762306a36Sopenharmony_ci        [backport of 2.6 commit b7acbdfbd1f277c1eb23f344f899cfa4cd0bf36a]
37862306a36Sopenharmony_ci
37962306a36Sopenharmony_ciどんな形式であれ、この情報はあなたのツリーを追跡する人やあなたのツリーのバグを
38062306a36Sopenharmony_ci解決しようとしている人にとって価値のある支援となります。
38162306a36Sopenharmony_ci
38262306a36Sopenharmony_ci13) いつ Acked-by: と Cc: を使うのか
38362306a36Sopenharmony_ci
38462306a36Sopenharmony_ci「 Signed-off-by: 」タグはその署名者がパッチの開発に関わっていたことやパッチ
38562306a36Sopenharmony_ciの伝播パスにいたことを示しています。
38662306a36Sopenharmony_ci
38762306a36Sopenharmony_ciある人が直接パッチの準備や作成に関わっていないけれど、その人のパッチに対す
38862306a36Sopenharmony_ciる承認を記録し、示したいとします。その場合、その人を示すのに Acked-by: が使
38962306a36Sopenharmony_ciえます。Acked-by: はパッチのチェンジログにも追加されます。
39062306a36Sopenharmony_ci
39162306a36Sopenharmony_ciパッチの影響を受けるコードのメンテナがパッチに関わっていなかったり、パッチ
39262306a36Sopenharmony_ciの伝播パスにいなかった時にも、メンテナは Acked-by: をしばしば利用します。
39362306a36Sopenharmony_ci
39462306a36Sopenharmony_ciAcked-by: は Signed-off-by: のように公式なタグではありません。それはメンテナが
39562306a36Sopenharmony_ci少なくともパッチをレビューし、同意を示しているという記録です。そのような
39662306a36Sopenharmony_ciことからパッチをマージする人がメンテナの「うん、良いと思うよ」という発言を
39762306a36Sopenharmony_ciAcked-by: へ置き換えることがあります。
39862306a36Sopenharmony_ci
39962306a36Sopenharmony_ciAcked-by: が必ずしもパッチ全体の承認を示しているわけではありません。例えば、
40062306a36Sopenharmony_ciあるパッチが複数のサブシステムへ影響を与えており、その中の1つのサブシステム
40162306a36Sopenharmony_ciのメンテナからの Acked-by: を持っているとします。その場合、Acked-by: は通常
40262306a36Sopenharmony_ciそのメンテナのコードに影響を与える一部分だけに対する承認を示しています。
40362306a36Sopenharmony_ciこの点は、ご自分で判断してください。(その Acked-by: が)疑わしい場合は、
40462306a36Sopenharmony_ciメーリングリストアーカイブの中の大元の議論を参照すべきです。
40562306a36Sopenharmony_ci
40662306a36Sopenharmony_ciパッチにコメントする機会を持っていたが、その時にコメントしなかった人がいれば、
40762306a36Sopenharmony_ciその人を指す「Cc:」タグを任意で追加してもかまいません。これは指定された人からの
40862306a36Sopenharmony_ci明確なアクションなしに付与できる唯一のタグです。
40962306a36Sopenharmony_ciこのタグはパッチに関心があると思われる人達がそのパッチの議論に含まれていたこと
41062306a36Sopenharmony_ciを明文化します。
41162306a36Sopenharmony_ci
41262306a36Sopenharmony_ci14) Reported-by:, Tested-by:, Reviewed-by: および Suggested-by: の利用
41362306a36Sopenharmony_ci
41462306a36Sopenharmony_ci他の誰かによって報告された問題を修正するパッチであれば、問題報告者という寄与を
41562306a36Sopenharmony_ciクレジットするために、Reported-by: タグを追加することを検討してください。
41662306a36Sopenharmony_ciこまめにバグ報告者をクレジットしていくことで、うまくいけばその人たちが将来再び
41762306a36Sopenharmony_ciコミュニティの力となってくれるでしょう。
41862306a36Sopenharmony_ciただし、報告者の許可無くこのタグを追加しないように注意してください。特に、
41962306a36Sopenharmony_ci問題が公の場で報告されていなかったのであれば。
42062306a36Sopenharmony_ci
42162306a36Sopenharmony_ciTested-by: タグはタグで指定された人によって(ある環境下で)パッチのテストに成功
42262306a36Sopenharmony_ciしていることを示します。このタグはメンテナにテストが実施済みであることを
42362306a36Sopenharmony_ci知らせ、将来の関連パッチのテスト協力者を見つける方法を提供し、テスト実施者に
42462306a36Sopenharmony_ci対するクレジットを保証します。
42562306a36Sopenharmony_ci
42662306a36Sopenharmony_ciReviewed-by: タグは、それとは異なり、下記のレビューア宣言の下にレビューされ、
42762306a36Sopenharmony_ci受け入れ可能とみなされたパッチであることを示します。
42862306a36Sopenharmony_ci
42962306a36Sopenharmony_ci        レビューアによる監督宣言
43062306a36Sopenharmony_ci
43162306a36Sopenharmony_ci        私は Reviewed-by: タグを提示することによって、以下のことを明言する。
43262306a36Sopenharmony_ci
43362306a36Sopenharmony_ci        (a) 私はメインラインカーネルへの統合に向け、その妥当性及び「即応性
43462306a36Sopenharmony_ci            (訳注)」を検証し、技術的側面からパッチをレビュー済みである。
43562306a36Sopenharmony_ci
43662306a36Sopenharmony_ci        訳注:
43762306a36Sopenharmony_ci        「即応性」の原文は "readiness"。
43862306a36Sopenharmony_ci        パッチが十分な品質を持っており、メインラインカーネルへの統合を即座に
43962306a36Sopenharmony_ci        行うことができる状態であるかどうかを "readiness" という単語で表現
44062306a36Sopenharmony_ci        している。
44162306a36Sopenharmony_ci
44262306a36Sopenharmony_ci        (b) パッチに関するあらゆる問題、懸念、あるいは、疑問は投稿者へ伝達済み
44362306a36Sopenharmony_ci            である。私はそれらのコメントに対する投稿者の返答に満足している。
44462306a36Sopenharmony_ci
44562306a36Sopenharmony_ci        (c) 投稿に伴い改良されるコードがある一方で、現時点で、私は(1)それが
44662306a36Sopenharmony_ci            カーネルにとって価値のある変更であること、そして、(2)統合に際して
44762306a36Sopenharmony_ci            議論になり得るような問題はないものと確信している。
44862306a36Sopenharmony_ci
44962306a36Sopenharmony_ci        (d) 私はパッチをレビューし適切であると確信している一方で、あらゆる
45062306a36Sopenharmony_ci            状況においてその宣言した目的や機能が正しく実現することに関して、
45162306a36Sopenharmony_ci            いかなる保証もしない(特にどこかで明示しない限り)。
45262306a36Sopenharmony_ci
45362306a36Sopenharmony_ciReviewed-by タグはそのパッチがカーネルに対して適切な修正であって、深刻な技術的
45462306a36Sopenharmony_ci問題を残していないという意見の宣言です。興味のあるレビューアは誰でも(レビュー
45562306a36Sopenharmony_ci作業を終えたら)パッチに対して Reviewed-by タグを提示できます。このタグは
45662306a36Sopenharmony_ciレビューアの寄与をクレジットする働き、レビューの進捗の度合いをメンテナに
45762306a36Sopenharmony_ci知らせる働きを持ちます。そのパッチの領域に詳しく、そして、しっかりとした
45862306a36Sopenharmony_ciレビューを実施したレビューアによって提供される時、Reviewed-by: タグがあなたの
45962306a36Sopenharmony_ciパッチをカーネルにマージする可能性を高めるでしょう。
46062306a36Sopenharmony_ci
46162306a36Sopenharmony_ciSuggested-by: タグは、パッチのアイデアがその人からの提案に基づくものである
46262306a36Sopenharmony_ciことを示し、アイデアの提供をクレジットするものです。提案者の明示的な許可が
46362306a36Sopenharmony_ciない場合、特にそのアイデアが公開のフォーラムで示されていない場合には、この
46462306a36Sopenharmony_ciタグをつけないように注意してください。とはいえ、アイデアの提供者をこつこつ
46562306a36Sopenharmony_ciクレジットしていけば、望むらくはその人たちが将来別の機会に再度力を貸す気に
46662306a36Sopenharmony_ciなってくれるかもしれません。
46762306a36Sopenharmony_ci
46862306a36Sopenharmony_ci15) 標準的なパッチのフォーマット
46962306a36Sopenharmony_ci
47062306a36Sopenharmony_ci標準的なパッチのサブジェクトは以下のとおりです。
47162306a36Sopenharmony_ci
47262306a36Sopenharmony_ci    Subject: [PATCH 001/123] subsystem: summary phrase
47362306a36Sopenharmony_ci
47462306a36Sopenharmony_ci標準的なパッチの、電子メールのボディは以下の項目を含んでいます。
47562306a36Sopenharmony_ci
47662306a36Sopenharmony_ci  - パッチの作成者を明記する「 from 」行
47762306a36Sopenharmony_ci
47862306a36Sopenharmony_ci  - 空行
47962306a36Sopenharmony_ci
48062306a36Sopenharmony_ci  - 説明本体。これはこのパッチを説明するために無期限のチェンジログ
48162306a36Sopenharmony_ci    (変更履歴)にコピーされます。
48262306a36Sopenharmony_ci
48362306a36Sopenharmony_ci  - 上述した「 Signed-off-by: 」行。これも説明本体と同じくチェン
48462306a36Sopenharmony_ci    ジログ内にコピーされます。
48562306a36Sopenharmony_ci
48662306a36Sopenharmony_ci  - マーカー行は単純に「 --- 」です。
48762306a36Sopenharmony_ci
48862306a36Sopenharmony_ci  - 余計なコメントは、チェンジログには不適切です。
48962306a36Sopenharmony_ci
49062306a36Sopenharmony_ci  - 実際のパッチ(差分出力)
49162306a36Sopenharmony_ci
49262306a36Sopenharmony_ciサブジェクト行のフォーマットは、アルファベット順で電子メールをとても
49362306a36Sopenharmony_ciソートしやすいものになっています。(ほとんどの電子メールクライアント
49462306a36Sopenharmony_ciはソートをサポートしています)パッチのサブジェクトの連番は0詰めであ
49562306a36Sopenharmony_ciるため、数字でのソートとアルファベットでのソートは同じ結果になります。
49662306a36Sopenharmony_ci
49762306a36Sopenharmony_ci電子メールのサブジェクト内のサブシステム表記は、パッチが適用される
49862306a36Sopenharmony_ci分野またはサブシステムを識別できるようにすべきです。
49962306a36Sopenharmony_ci
50062306a36Sopenharmony_ci電子メールのサブジェクトの「summary phrase」はそのパッチの概要を正確
50162306a36Sopenharmony_ciに表現しなければなりません。「summary phrase」をファイル名にしてはい
50262306a36Sopenharmony_ciけません。パッチシリーズ中でそれぞれのパッチは同じ「summary phrase」を
50362306a36Sopenharmony_ci使ってはいけません(「パッチシリーズ」とは順序付けられた関連のある複数の
50462306a36Sopenharmony_ciパッチ群です)。
50562306a36Sopenharmony_ci
50662306a36Sopenharmony_ciあなたの電子メールの「summary phrase」がそのパッチにとって世界で唯一の識別子に
50762306a36Sopenharmony_ciなるように心がけてください。「summary phrase」は git のチェンジログの中へ
50862306a36Sopenharmony_ciずっと伝播していきます。「summary phrase」は、開発者が後でパッチを参照する
50962306a36Sopenharmony_ciために議論の中で利用するかもしれません。
51062306a36Sopenharmony_ci人々はそのパッチに関連した議論を読むために「summary phrase」を使って google で
51162306a36Sopenharmony_ci検索したがるでしょう。それはまた2、3ヶ月あとで、人々が「gitk」や
51262306a36Sopenharmony_ci「git log --oneline」のようなツールを使用して何千ものパッチに目を通す時、
51362306a36Sopenharmony_ci唯一目にとまる情報となるでしょう。
51462306a36Sopenharmony_ci
51562306a36Sopenharmony_ciこれらの理由のため、「summary phrase」はなぜパッチが必要であるか、パッチが何を
51662306a36Sopenharmony_ci変更するかの2つの情報をせいぜい70〜75文字で表現していなければなりません。
51762306a36Sopenharmony_ci「summary phrase」は簡潔であり説明的である表現を目指しつつ、うまく
51862306a36Sopenharmony_ciまとめられている概要となるべきです。
51962306a36Sopenharmony_ci
52062306a36Sopenharmony_ci「summary phrase」は「Subject: [PATCH tag] <summary phrase>」のように、
52162306a36Sopenharmony_ci大括弧で閉じられたタグを接頭辞として付加してもかまいません。このタグは
52262306a36Sopenharmony_ci「summary phrase」の一部とは考えませんが、パッチをどのように取り扱うべきかを
52362306a36Sopenharmony_ci表現します。
52462306a36Sopenharmony_ci一般的には「v1, v2, v3」のようなバージョン情報を表すタグ(過去のパッチに対する
52562306a36Sopenharmony_ciコメントを反映するために複数のバージョンのパッチが投稿されているのであれば)、
52662306a36Sopenharmony_ci「RFC」のようなコメントを要求するタグが挙げられます。パッチシリーズとして4つの
52762306a36Sopenharmony_ciパッチがあれば、個々のパッチに「1/4, 2/4, 3/4, 4/4」のように番号を付けても
52862306a36Sopenharmony_ciかまいません。これは開発者がパッチを適用する順番を確実に把握するためです。
52962306a36Sopenharmony_ciそして、開発者がパッチシリーズの中のすべてのパッチをもらさずレビュー或いは
53062306a36Sopenharmony_ci適用するのを保証するためです。
53162306a36Sopenharmony_ci
53262306a36Sopenharmony_ciサブジェクトの例を二つ
53362306a36Sopenharmony_ci
53462306a36Sopenharmony_ci    Subject: [patch 2/5] ext2: improve scalability of bitmap searching
53562306a36Sopenharmony_ci    Subject: [PATCHv2 001/207] x86: fix eflags tracking
53662306a36Sopenharmony_ci
53762306a36Sopenharmony_ci「 from 」行は電子メールのボディの一番最初の行でなければなりません。
53862306a36Sopenharmony_ciその形式は以下のとおりです。
53962306a36Sopenharmony_ci
54062306a36Sopenharmony_ci        From: Original Author <author@example.com>
54162306a36Sopenharmony_ci
54262306a36Sopenharmony_ci「 from 」行はチェンジログの中で、そのパッチの作成者としてクレジットされ
54362306a36Sopenharmony_ciている人を特定するものです。「 from 」行がかけていると、電子メールのヘッ
54462306a36Sopenharmony_ciダーの「 From: 」が、チェンジログの中でパッチの作成者を決定するために使わ
54562306a36Sopenharmony_ciれるでしょう。
54662306a36Sopenharmony_ci
54762306a36Sopenharmony_ci説明本体は無期限のソースのチェンジログにコミットされます。なので、説明
54862306a36Sopenharmony_ci本体はそのパッチに至った議論の詳細を忘れているある程度の技量を持っている人
54962306a36Sopenharmony_ciがその詳細を思い出すことができるものでなければなりません。パッチが対処する
55062306a36Sopenharmony_ci障害の症状(カーネルログメッセージや oops メッセージ等)を記載することは問題に
55162306a36Sopenharmony_ci対処可能なパッチを求めてコミットログを検索する人々にとって特に有用です。
55262306a36Sopenharmony_ciパッチがコンパイル問題を解決するのであれば、そのパッチを探している人が見つける
55362306a36Sopenharmony_ciことができる情報だけで十分であり、コンパイル時の全てのエラーを含める必要は
55462306a36Sopenharmony_ciありません。「summary phrase」と同様に、簡潔であり説明的であることが重要です。
55562306a36Sopenharmony_ci
55662306a36Sopenharmony_ci「 --- 」マーカー行はパッチ処理ツールに対して、チェンジログメッセージの終端
55762306a36Sopenharmony_ci部分を認識させるという重要な役目を果たします。
55862306a36Sopenharmony_ci
55962306a36Sopenharmony_ci「 --- 」マーカー行の後の追加コメントの良い使用方法の1つに diffstat コマンド
56062306a36Sopenharmony_ciがあります。diffstat コマンドとは何のファイルが変更され、1ファイル当たり何行
56162306a36Sopenharmony_ci追加され何行消されたかを示すものです。diffstat コマンドは特に大きなパッチに
56262306a36Sopenharmony_ciおいて役立ちます。その時点でだけ又はメンテナにとってのみ関係のあるコメント
56362306a36Sopenharmony_ciは無期限に保存されるチェンジログにとって適切ではありません。そのため、この
56462306a36Sopenharmony_ciようなコメントもマーカー行の後に書かれるべきです。
56562306a36Sopenharmony_ciこのようなコメントの良い例として、v1 と v2 のバージョン間で何が変更されたかを
56662306a36Sopenharmony_ci表す「パッチの変更履歴」が挙げられます。
56762306a36Sopenharmony_ci
56862306a36Sopenharmony_ci「 --- 」マーカー行の後に diffstat コマンドの結果を含めるのであれば、ファイル
56962306a36Sopenharmony_ci名はカーネルソースツリーのトップディレクトリからの表記で列記されるため、横方向
57062306a36Sopenharmony_ciのスペースをとり過ぎないように、diffstat コマンドにオプション「 -p 1 -w 70 」
57162306a36Sopenharmony_ciを指定してください(インデントを含めてちょうど80列に合うでしょう)。
57262306a36Sopenharmony_ci
57362306a36Sopenharmony_ci適切なパッチのフォーマットの詳細についてはセクション3の参考文献を参照して
57462306a36Sopenharmony_ciください。
57562306a36Sopenharmony_ci
57662306a36Sopenharmony_ci16) 「git pull」要求の送り方(Linus の電子メールから)
57762306a36Sopenharmony_ci
57862306a36Sopenharmony_ci間違ったブランチから引っ張るのを防ぐために、git リポジトリのアドレスと
57962306a36Sopenharmony_ciブランチ名を同じ行に1行で記載してください。そうすることで、3回の連続クリック
58062306a36Sopenharmony_ciで全て選択できます。
58162306a36Sopenharmony_ci
58262306a36Sopenharmony_ci正しい形式は下記の通りです。
58362306a36Sopenharmony_ci
58462306a36Sopenharmony_ci	"Please pull from
58562306a36Sopenharmony_ci
58662306a36Sopenharmony_ci		git://jdelvare.pck.nerim.net/jdelvare-2.6 i2c-for-linus
58762306a36Sopenharmony_ci
58862306a36Sopenharmony_ci	 to get these changes:"
58962306a36Sopenharmony_ci
59062306a36Sopenharmony_ciその結果、アドレスを自分自身でタイピングして間違えることはなくなります(実際に、
59162306a36Sopenharmony_ci何度か間違ったブランチから引っ張ってきてしまい、その時に diffstat の結果を
59262306a36Sopenharmony_ci検証して間違っていることに気づいたことがあります。どこから何を引っ張るべきかを
59362306a36Sopenharmony_ci「探したり」、正しいブランチ名かどうかを重ねてチェックしたりする必要が
59462306a36Sopenharmony_ciなくなればより快適になるでしょう)。
59562306a36Sopenharmony_ci
59662306a36Sopenharmony_cidiffstat の結果を生成するために「 git diff -M --stat --summary 」を使って
59762306a36Sopenharmony_ciください。-M オプションはファイル名の変更を検知でき、--summary オプションは
59862306a36Sopenharmony_ci新規ファイル、削除されたファイル、名前が変更されたファイルの概要を生成します。
59962306a36Sopenharmony_ci
60062306a36Sopenharmony_ci-M オプション(ファイル名の変更検知)を指定すると、diffstat の結果はかなり
60162306a36Sopenharmony_ci異なってきます。git は大規模な変更(追加と削除のペア)をファイル名の変更と
60262306a36Sopenharmony_ci判断するためです。
60362306a36Sopenharmony_ci
60462306a36Sopenharmony_ci------------------------------------
60562306a36Sopenharmony_ciセクション2 - ヒントとTIPSと小技
60662306a36Sopenharmony_ci------------------------------------
60762306a36Sopenharmony_ci
60862306a36Sopenharmony_ciこのセクションは Linux カーネルに変更を適用することに関係のある一般的な
60962306a36Sopenharmony_ci「お約束」の多くを載せています。物事には例外というものがあります。しか
61062306a36Sopenharmony_ciし例外を適用するには、本当に妥当な理由が不可欠です。あなたは恐らくこの
61162306a36Sopenharmony_ciセクションを Linus のコンピュータ・サイエンス101と呼ぶでしょう。
61262306a36Sopenharmony_ci
61362306a36Sopenharmony_ci1) Documentation/process/coding-style.rstを参照
61462306a36Sopenharmony_ci
61562306a36Sopenharmony_ci言うまでもなく、あなたのコードがこのコーディングスタイルからあまりに
61662306a36Sopenharmony_ciも逸脱していると、レビューやコメントなしに受け取ってもらえないかもし
61762306a36Sopenharmony_ciれません。
61862306a36Sopenharmony_ci
61962306a36Sopenharmony_ci特筆すべき例外は、コードをあるファイルから別のファイルに移動
62062306a36Sopenharmony_ciするときです。この場合、コードを移動するパッチでは、移動されるコード
62162306a36Sopenharmony_ciに関して移動以外の変更を一切加えるべきではありません。これにより、
62262306a36Sopenharmony_ciコードの移動とあなたが行ったコードの修正を明確に区別できるようにな
62362306a36Sopenharmony_ciります。これは実際に何が変更されたかをレビューする際の大きな助けに
62462306a36Sopenharmony_ciなるとともに、ツールにコードの履歴を追跡させることも容易になります。
62562306a36Sopenharmony_ci
62662306a36Sopenharmony_ci投稿するより前にパッチのスタイルチェッカー( scripts/checkpatch.pl )で
62762306a36Sopenharmony_ciあなたのパッチをチェックしてください。このスタイルチェッカーは最終結
62862306a36Sopenharmony_ci論としてではなく、指標としてみるべきです。もし、あなたのコードが違反
62962306a36Sopenharmony_ciはしているが修正するより良く見えるのであれば、おそらくそのままにする
63062306a36Sopenharmony_ciのがベストです。
63162306a36Sopenharmony_ci
63262306a36Sopenharmony_ciスタイルチェッカーによる3段階のレポート:
63362306a36Sopenharmony_ci - エラー: 間違っている可能性が高い
63462306a36Sopenharmony_ci - 警告:注意してレビューする必要がある
63562306a36Sopenharmony_ci - チェック:考慮する必要がある
63662306a36Sopenharmony_ci
63762306a36Sopenharmony_ciあなたはパッチに残っている全ての違反について、それがなぜ必要なのか正当な
63862306a36Sopenharmony_ci理由を示せるようにしておく必要があります。
63962306a36Sopenharmony_ci
64062306a36Sopenharmony_ci2) #ifdefは見苦しい
64162306a36Sopenharmony_ci
64262306a36Sopenharmony_ciifdef が散乱したコードは、読むのもメンテナンスするのも面倒です。コードの中
64362306a36Sopenharmony_ciで ifdef を使わないでください。代わりに、ヘッダファイルの中に ifdef を入れて、
64462306a36Sopenharmony_ci条件付きで、コードの中で使われる関数を「 static inline 」関数かマクロで定義し
64562306a36Sopenharmony_ciてください。後はコンパイラが、何もしない箇所を最適化して取り去ってくれるで
64662306a36Sopenharmony_ciしょう。
64762306a36Sopenharmony_ci
64862306a36Sopenharmony_ciまずいコードの簡単な例
64962306a36Sopenharmony_ci
65062306a36Sopenharmony_ci	dev = alloc_etherdev (sizeof(struct funky_private));
65162306a36Sopenharmony_ci	if (!dev)
65262306a36Sopenharmony_ci		return -ENODEV;
65362306a36Sopenharmony_ci	#ifdef CONFIG_NET_FUNKINESS
65462306a36Sopenharmony_ci	init_funky_net(dev);
65562306a36Sopenharmony_ci	#endif
65662306a36Sopenharmony_ci
65762306a36Sopenharmony_ciクリーンアップしたコードの例
65862306a36Sopenharmony_ci
65962306a36Sopenharmony_ci(in header)
66062306a36Sopenharmony_ci	#ifndef CONFIG_NET_FUNKINESS
66162306a36Sopenharmony_ci	static inline void init_funky_net (struct net_device *d) {}
66262306a36Sopenharmony_ci	#endif
66362306a36Sopenharmony_ci
66462306a36Sopenharmony_ci(in the code itself)
66562306a36Sopenharmony_ci	dev = alloc_etherdev (sizeof(struct funky_private));
66662306a36Sopenharmony_ci	if (!dev)
66762306a36Sopenharmony_ci		return -ENODEV;
66862306a36Sopenharmony_ci	init_funky_net(dev);
66962306a36Sopenharmony_ci
67062306a36Sopenharmony_ci3) マクロより「 static inline 」を推奨
67162306a36Sopenharmony_ci
67262306a36Sopenharmony_ci「 static inline 」関数はマクロよりもずっと推奨されています。それらは、
67362306a36Sopenharmony_ci型安全性があり、長さにも制限が無く、フォーマットの制限もありません。
67462306a36Sopenharmony_cigcc においては、マクロと同じくらい軽いです。
67562306a36Sopenharmony_ci
67662306a36Sopenharmony_ciマクロは「 static inline 」が明らかに不適切であると分かる場所(高速化パスの
67762306a36Sopenharmony_ciいくつかの特定のケース)や「 static inline 」関数を使うことができないような
67862306a36Sopenharmony_ci場所(マクロの引数の文字列連結のような)にだけ使われるべきです。
67962306a36Sopenharmony_ci
68062306a36Sopenharmony_ci「 static inline 」は「 static __inline__ 」や「 extern inline 」や
68162306a36Sopenharmony_ci「 extern __inline__ 」よりも適切です。
68262306a36Sopenharmony_ci
68362306a36Sopenharmony_ci4) 設計に凝りすぎるな
68462306a36Sopenharmony_ci
68562306a36Sopenharmony_ciそれが有用になるかどうか分からないような不明瞭な将来を見越した設計
68662306a36Sopenharmony_ciをしないでください。「できる限り簡単に、そして、それ以上簡単になら
68762306a36Sopenharmony_ciないような設計をしてください。」
68862306a36Sopenharmony_ci
68962306a36Sopenharmony_ci----------------------
69062306a36Sopenharmony_ciセクション3 参考文献
69162306a36Sopenharmony_ci----------------------
69262306a36Sopenharmony_ci
69362306a36Sopenharmony_ciAndrew Morton, "The perfect patch" (tpp).
69462306a36Sopenharmony_ci  <http://www.ozlabs.org/~akpm/stuff/tpp.txt>
69562306a36Sopenharmony_ci
69662306a36Sopenharmony_ciJeff Garzik, "Linux kernel patch submission format".
69762306a36Sopenharmony_ci  <https://web.archive.org/web/20180829112450/http://linux.yyz.us/patch-format.html>
69862306a36Sopenharmony_ci
69962306a36Sopenharmony_ciGreg Kroah-Hartman, "How to piss off a kernel subsystem maintainer".
70062306a36Sopenharmony_ci  <http://www.kroah.com/log/linux/maintainer.html>
70162306a36Sopenharmony_ci  <http://www.kroah.com/log/linux/maintainer-02.html>
70262306a36Sopenharmony_ci  <http://www.kroah.com/log/linux/maintainer-03.html>
70362306a36Sopenharmony_ci  <http://www.kroah.com/log/linux/maintainer-04.html>
70462306a36Sopenharmony_ci  <http://www.kroah.com/log/linux/maintainer-05.html>
70562306a36Sopenharmony_ci
70662306a36Sopenharmony_ciNO!!!! No more huge patch bombs to linux-kernel@vger.kernel.org people!
70762306a36Sopenharmony_ci  <https://lore.kernel.org/r/20050711.125305.08322243.davem@davemloft.net>
70862306a36Sopenharmony_ci
70962306a36Sopenharmony_ciKernel Documentation/process/coding-style.rst:
71062306a36Sopenharmony_ci  <http://users.sosdg.org/~qiyong/lxr/source/Documentation/process/coding-style.rst>
71162306a36Sopenharmony_ci
71262306a36Sopenharmony_ciLinus Torvalds's mail on the canonical patch format:
71362306a36Sopenharmony_ci  <https://lore.kernel.org/r/Pine.LNX.4.58.0504071023190.28951@ppc970.osdl.org>
71462306a36Sopenharmony_ci
71562306a36Sopenharmony_ciAndi Kleen, "On submitting kernel patches"
71662306a36Sopenharmony_ci  Some strategies to get difficult or controversial changes in.
71762306a36Sopenharmony_ci  http://halobates.de/on-submitting-patches.pdf
71862306a36Sopenharmony_ci
71962306a36Sopenharmony_ci--
72062306a36Sopenharmony_ci
72162306a36Sopenharmony_ci
722