19544a2daSSeongJae ParkNOTE: 29544a2daSSeongJae ParkThis is a version of Documentation/process/submitting-patches.rst into Japanese. 39544a2daSSeongJae ParkThis document is maintained by Keiichi KII <k-keiichi@bx.jp.nec.com> 49544a2daSSeongJae Parkand the JF Project team <http://www.linux.or.jp/JF/>. 59544a2daSSeongJae ParkIf you find any difference between this document and the original file 69544a2daSSeongJae Parkor a problem with the translation, 79544a2daSSeongJae Parkplease contact the maintainer of this file or JF project. 89544a2daSSeongJae Park 99544a2daSSeongJae ParkPlease also note that the purpose of this file is to be easier to read 109544a2daSSeongJae Parkfor non English (read: Japanese) speakers and is not intended as a 119544a2daSSeongJae Parkfork. So if you have any comments or updates of this file, please try 129544a2daSSeongJae Parkto update the original English file first. 139544a2daSSeongJae Park 149544a2daSSeongJae ParkLast Updated: 2011/06/09 159544a2daSSeongJae Park 169544a2daSSeongJae Park================================== 179544a2daSSeongJae Parkこれは、 189544a2daSSeongJae Parklinux-2.6.39/Documentation/process/submitting-patches.rst の和訳 199544a2daSSeongJae Parkです。 209544a2daSSeongJae Park翻訳団体: JF プロジェクト < http://www.linux.or.jp/JF/ > 219544a2daSSeongJae Park翻訳日: 2011/06/09 229544a2daSSeongJae Park翻訳者: Keiichi Kii <k-keiichi at bx dot jp dot nec dot com> 239544a2daSSeongJae Park校正者: Masanari Kobayashi さん <zap03216 at nifty dot ne dot jp> 249544a2daSSeongJae Park Matsukura さん <nbh--mats at nifty dot com> 259544a2daSSeongJae Park Takeshi Hamasaki さん <hmatrjp at users dot sourceforge dot jp> 269544a2daSSeongJae Park================================== 279544a2daSSeongJae Park 289544a2daSSeongJae Park Linux カーネルに変更を加えるための Howto 299544a2daSSeongJae Park 又は 309544a2daSSeongJae Park かの Linus Torvalds の取り扱い説明書 319544a2daSSeongJae Park 329544a2daSSeongJae ParkLinux カーネルに変更を加えたいと思っている個人又は会社にとって、パッ 339544a2daSSeongJae Parkチの投稿に関連した仕組みに慣れていなければ、その過程は時々みなさんを 349544a2daSSeongJae Parkおじけづかせることもあります。この文章はあなたの変更を大いに受け入れ 359544a2daSSeongJae Parkてもらえやすくする提案を集めたものです。 369544a2daSSeongJae Park 379544a2daSSeongJae Parkコードを投稿する前に、Documentation/process/submit-checklist.rst の項目リストに目 3804d4ca41SAkira Yokosawaを通してチェックしてください。 399544a2daSSeongJae Park 409544a2daSSeongJae Park-------------------------------------------- 419544a2daSSeongJae Parkセクション1 パッチの作り方と送り方 429544a2daSSeongJae Park-------------------------------------------- 439544a2daSSeongJae Park 449544a2daSSeongJae Park1) 「 diff -up 」 459544a2daSSeongJae Park------------ 469544a2daSSeongJae Park 479544a2daSSeongJae Parkパッチの作成には「 diff -up 」又は「 diff -uprN 」を使ってください。 489544a2daSSeongJae Park 499544a2daSSeongJae ParkLinux カーネルに対する全ての変更は diff(1) コマンドによるパッチの形式で 509544a2daSSeongJae Park生成してください。パッチを作成するときには、diff(1) コマンドに「 -u 」引 519544a2daSSeongJae Park数を指定して、unified 形式のパッチを作成することを確認してください。また、 529544a2daSSeongJae Park変更がどの C 関数で行われたのかを表示する「 -p 」引数を使ってください。 539544a2daSSeongJae Parkこの引数は生成した差分をずっと読みやすくしてくれます。パッチは Linux 549544a2daSSeongJae Parkカーネルソースの中のサブディレクトリではなく Linux カーネルソースのルート 559544a2daSSeongJae Parkディレクトリを基準にしないといけません。 569544a2daSSeongJae Park 579544a2daSSeongJae Park1個のファイルについてのパッチを作成するためには、ほとんどの場合、 589544a2daSSeongJae Park以下の作業を行えば十分です。 599544a2daSSeongJae Park 609544a2daSSeongJae Park SRCTREE=linux-2.6 619544a2daSSeongJae Park MYFILE=drivers/net/mydriver.c 629544a2daSSeongJae Park 639544a2daSSeongJae Park cd $SRCTREE 649544a2daSSeongJae Park cp $MYFILE $MYFILE.orig 659544a2daSSeongJae Park vi $MYFILE # make your change 669544a2daSSeongJae Park cd .. 679544a2daSSeongJae Park diff -up $SRCTREE/$MYFILE{.orig,} > /tmp/patch 689544a2daSSeongJae Park 699544a2daSSeongJae Park複数のファイルについてのパッチを作成するためには、素の( vanilla )、す 709544a2daSSeongJae Parkなわち変更を加えてない Linux カーネルを展開し、自分の Linux カーネル 719544a2daSSeongJae Parkソースとの差分を生成しないといけません。例えば、 729544a2daSSeongJae Park 739544a2daSSeongJae Park MYSRC=/devel/linux-2.6 749544a2daSSeongJae Park 759544a2daSSeongJae Park tar xvfz linux-2.6.12.tar.gz 769544a2daSSeongJae Park mv linux-2.6.12 linux-2.6.12-vanilla 779544a2daSSeongJae Park diff -uprN -X linux-2.6.12-vanilla/Documentation/dontdiff \ 789544a2daSSeongJae Park linux-2.6.12-vanilla $MYSRC > /tmp/patch 799544a2daSSeongJae Park 809544a2daSSeongJae Parkdontdiff ファイルには Linux カーネルのビルドプロセスの過程で生成された 819544a2daSSeongJae Parkファイルの一覧がのっています。そして、それらはパッチを生成する diff(1) 829544a2daSSeongJae Parkコマンドで無視されるべきです。dontdiff ファイルは 2.6.12 以後のバージョ 83d797255bSAkira Yokosawaンの Linux カーネルソースツリーに含まれています。 849544a2daSSeongJae Park 859544a2daSSeongJae Park投稿するパッチの中に関係のない余分なファイルが含まれていないことを確 869544a2daSSeongJae Park認してください。diff(1) コマンドで生成したパッチがあなたの意図したとお 879544a2daSSeongJae Parkりのものであることを確認してください。 889544a2daSSeongJae Park 899544a2daSSeongJae Parkもしあなたのパッチが多くの差分を生み出すのであれば、あなたはパッチ 909544a2daSSeongJae Parkを意味のあるひとまとまりごとに分けたいと思うかもしれません。 919544a2daSSeongJae Parkこれは他のカーネル開発者にとってレビューしやすくなるので、あなたの 929544a2daSSeongJae Parkパッチを受け入れてもらうためにはとても重要なことです。これを補助でき 939544a2daSSeongJae Parkる多くのスクリプトがあります。 949544a2daSSeongJae Park 959544a2daSSeongJae ParkQuilt: 969544a2daSSeongJae Parkhttp://savannah.nongnu.org/projects/quilt 979544a2daSSeongJae Park 989544a2daSSeongJae Park2) パッチに対する説明 999544a2daSSeongJae Park 1009544a2daSSeongJae Parkパッチの中の変更点に対する技術的な詳細について説明してください。 1019544a2daSSeongJae Park 1029544a2daSSeongJae Park説明はできる限り具体的に。もっとも悪い説明は「ドライバー X を更新」、 1039544a2daSSeongJae Park「ドライバー X に対するバグフィックス」あるいは「このパッチはサブシス 1049544a2daSSeongJae Parkテム X に対する更新を含んでいます。どうか取り入れてください。」などです。 1059544a2daSSeongJae Park 1069544a2daSSeongJae Parkパッチの説明を Linux カーネルのソースコードマネジメントシステム「 git 」の 1079544a2daSSeongJae Parkコミットログとして簡単に引用できる形で書けば、メンテナから感謝されるでしょう。 1089544a2daSSeongJae Park以下の #15 を見てください。 1099544a2daSSeongJae Park 1109544a2daSSeongJae Park説明が長くなりだしたのであれば、おそらくそれはパッチを分ける必要がある 1119544a2daSSeongJae Parkという兆候です。次の #3 を見てください。 1129544a2daSSeongJae Park 1139544a2daSSeongJae Parkパッチ(シリーズ)を(再)投稿する時、十分なパッチの説明とそのパッチが必要な理由を 1149544a2daSSeongJae Parkパッチに含めてください。ただ「これはパッチ(シリーズ)のバージョン N」とだけ 1159544a2daSSeongJae Park書かないでください。そして、パッチをマージする人にパッチの説明を探させそれを 1169544a2daSSeongJae Parkパッチに追記させるため、過去のバージョンのパッチやそのパッチの URL を参照する 1179544a2daSSeongJae Park手間をかけさせないでください。 1189544a2daSSeongJae Parkつまり、パッチシリーズとその説明は一緒にあるべきです。これはパッチをマージする 1199544a2daSSeongJae Park人、レビューする人、どちらのためにもなります。レビューする人の中には、おそらく 1209544a2daSSeongJae Park過去のバージョンのパッチを受け取ってもいない人がいます。 1219544a2daSSeongJae Park 1229544a2daSSeongJae Park登録済みのバグエントリを修正するパッチであれば、そのバグエントリを示すバグ ID 1239544a2daSSeongJae Parkや URL を明記してください。 1249544a2daSSeongJae Park 125e29b3abcSAkira Yokosawa特定のコミットを参照したい場合は、その SHA-1 ID だけでなく、一行サマリ 126e29b3abcSAkira Yokosawaも含めてください。それにより、それが何に関するコミットなのかがレビューする 127e29b3abcSAkira Yokosawa人にわかりやすくなります。 128e29b3abcSAkira Yokosawa例 (英文のママ): 129e29b3abcSAkira Yokosawa 130e29b3abcSAkira Yokosawa Commit e21d2170f36602ae2708 ("video: remove unnecessary 131e29b3abcSAkira Yokosawa platform_set_drvdata()") removed the unnecessary 132e29b3abcSAkira Yokosawa platform_set_drvdata(), but left the variable "dev" unused, 133e29b3abcSAkira Yokosawa delete it. 134e29b3abcSAkira Yokosawa 135e29b3abcSAkira Yokosawa 1369544a2daSSeongJae Park3) パッチの分割 1379544a2daSSeongJae Park 1389544a2daSSeongJae Park意味のあるひとまとまりごとに変更を個々のパッチファイルに分けてください。 1399544a2daSSeongJae Park 1409544a2daSSeongJae Park例えば、もし1つのドライバーに対するバグフィックスとパフォーマンス強 1419544a2daSSeongJae Park化の両方の変更を含んでいるのであれば、その変更を2つ以上のパッチに分 1429544a2daSSeongJae Parkけてください。もし変更箇所に API の更新と、その新しい API を使う新たな 1439544a2daSSeongJae Parkドライバーが含まれているなら、2つのパッチに分けてください。 1449544a2daSSeongJae Park 1459544a2daSSeongJae Park一方で、もしあなたが多数のファイルに対して意味的に同じ1つの変更を加え 1469544a2daSSeongJae Parkるのであれば、その変更を1つのパッチにまとめてください。言いかえると、 1479544a2daSSeongJae Park意味的に同じ1つの変更は1つのパッチの中に含まれます。 1489544a2daSSeongJae Park 1499544a2daSSeongJae Parkあるパッチが変更を完結させるために他のパッチに依存していたとしても、 1509544a2daSSeongJae Parkそれは問題ありません。パッチの説明の中で「このパッチはパッチ X に依存 1519544a2daSSeongJae Parkしている」と簡単に注意書きをつけてください。 1529544a2daSSeongJae Park 1539544a2daSSeongJae Parkもしパッチをより小さなパッチの集合に凝縮することができないなら、まずは 1549544a2daSSeongJae Park15かそこらのパッチを送り、そのレビューと統合を待って下さい。 1559544a2daSSeongJae Park 1569544a2daSSeongJae Park4) パッチのスタイルチェック 1579544a2daSSeongJae Park 1589544a2daSSeongJae Parkあなたのパッチが基本的な( Linux カーネルの)コーディングスタイルに違反し 1599544a2daSSeongJae Parkていないかをチェックして下さい。その詳細を Documentation/process/coding-style.rst で 1609544a2daSSeongJae Park見つけることができます。コーディングスタイルの違反はレビューする人の 1619544a2daSSeongJae Park時間を無駄にするだけなので、恐らくあなたのパッチは読まれることすらなく 1629544a2daSSeongJae Park拒否されるでしょう。 1639544a2daSSeongJae Park 1649544a2daSSeongJae Parkあなたはパッチを投稿する前に最低限パッチスタイルチェッカー 1659544a2daSSeongJae Park( scripts/checkpatch.pl )を利用してパッチをチェックすべきです。 1669544a2daSSeongJae Parkもしパッチに違反がのこっているならば、それらの全てについてあなたは正当な 1679544a2daSSeongJae Park理由を示せるようにしておく必要があります。 1689544a2daSSeongJae Park 1699544a2daSSeongJae Park5) 電子メールの宛先の選び方 1709544a2daSSeongJae Park 1719544a2daSSeongJae ParkMAINTAINERS ファイルとソースコードに目を通してください。そして、その変 1729544a2daSSeongJae Park更がメンテナのいる特定のサブシステムに加えられるものであることが分か 173164f9fcbSAkira Yokosawaれば、その人に電子メールを送ってください。その際 174164f9fcbSAkira Yokosawa./scripts/get_maintainers.pl のスクリプトが有用です。 1759544a2daSSeongJae Park 1769544a2daSSeongJae Parkもし、メンテナが載っていなかったり、メンテナからの応答がないなら、 1779544a2daSSeongJae ParkLKML ( linux-kernel@vger.kernel.org )へパッチを送ってください。ほとんど 1789544a2daSSeongJae Parkのカーネル開発者はこのメーリングリストに目を通しており、変更に対して 1799544a2daSSeongJae Parkコメントを得ることができます。 1809544a2daSSeongJae Park 1819544a2daSSeongJae Park15個より多くのパッチを同時に vger.kernel.org のメーリングリストへ送らな 1829544a2daSSeongJae Parkいでください!!! 1839544a2daSSeongJae Park 1849544a2daSSeongJae ParkLinus Torvalds は Linux カーネルに入る全ての変更に対する最終的な意思決定者 1859544a2daSSeongJae Parkです。電子メールアドレスは torvalds@linux-foundation.org になります。彼は 1869544a2daSSeongJae Park多くの電子メールを受け取っているため、できる限り彼に電子メールを送るのは 1879544a2daSSeongJae Park避けるべきです。 1889544a2daSSeongJae Park 1899544a2daSSeongJae Parkバグフィックスであったり、自明な変更であったり、話し合いをほとんど 1909544a2daSSeongJae Park必要としないパッチは Linus へ電子メールを送るか CC しなければなりません。 1919544a2daSSeongJae Park話し合いを必要としたり、明確なアドバンテージがないパッチは、通常まず 1929544a2daSSeongJae Parkは LKML へ送られるべきです。パッチが議論された後にだけ、そのパッチを 1939544a2daSSeongJae ParkLinus へ送るべきです。 1949544a2daSSeongJae Park 1959544a2daSSeongJae Park6) CC (カーボンコピー)先の選び方 1969544a2daSSeongJae Park 1979544a2daSSeongJae Park特に理由がないなら、LKML にも CC してください。 1989544a2daSSeongJae Park 1999544a2daSSeongJae ParkLinus 以外のカーネル開発者は変更に気づく必要があり、その結果、彼らはそ 2009544a2daSSeongJae Parkの変更に対してコメントをくれたり、コードに対してレビューや提案をくれ 2019544a2daSSeongJae Parkるかもしれません。LKML とは Linux カーネル開発者にとって一番中心的なメー 2029544a2daSSeongJae Parkリングリストです。USB やフレームバッファデバイスや VFS や SCSI サブシステ 2039544a2daSSeongJae Parkムなどの特定のサブシステムに関するメーリングリストもあります。あなた 2049544a2daSSeongJae Parkの変更に、はっきりと関連のあるメーリングリストについて知りたければ 2059544a2daSSeongJae ParkMAINTAINERS ファイルを参照してください。 2069544a2daSSeongJae Park 2079544a2daSSeongJae ParkVGER.KERNEL.ORG でホスティングされているメーリングリストの一覧が下記の 2089544a2daSSeongJae Parkサイトに載っています。 2099544a2daSSeongJae Park<http://vger.kernel.org/vger-lists.html> 2109544a2daSSeongJae Park 2119544a2daSSeongJae Parkもし、変更がユーザランドのカーネルインタフェースに影響を与え 2129544a2daSSeongJae Parkるのであれば、MAN-PAGES のメンテナ( MAINTAINERS ファイルに一覧 2139544a2daSSeongJae Parkがあります)に man ページのパッチを送ってください。少なくとも 2149544a2daSSeongJae Park情報がマニュアルページの中に入ってくるように、変更が起きたという 2159544a2daSSeongJae Park通知を送ってください。 2169544a2daSSeongJae Park 2179544a2daSSeongJae Parkたとえ、メンテナが #5 で反応がなかったとしても、メンテナのコードに変更を 2189544a2daSSeongJae Park加えたときには、いつもメンテナに CC するのを忘れないようにしてください。 2199544a2daSSeongJae Park 2209544a2daSSeongJae Park 2219544a2daSSeongJae Park7) MIME やリンクや圧縮ファイルや添付ファイルではなくプレインテキストのみ 2229544a2daSSeongJae Park 2239544a2daSSeongJae ParkLinus や他のカーネル開発者はあなたが投稿した変更を読んで、コメントでき 2249544a2daSSeongJae Parkる必要があります。カーネル開発者にとって、あなたが書いたコードの特定の 2259544a2daSSeongJae Park部分にコメントをするために、標準的な電子メールクライアントで変更が引用 2269544a2daSSeongJae Parkできることは重要です。 2279544a2daSSeongJae Park 2289544a2daSSeongJae Park上記の理由で、すべてのパッチは文中に含める形式の電子メールで投稿さ 2299544a2daSSeongJae Parkれるべきです。警告:あなたがパッチをコピー&ペーストする際には、パッ 2309544a2daSSeongJae Parkチを改悪するエディターの折り返し機能に注意してください。 2319544a2daSSeongJae Park 2329544a2daSSeongJae Parkパッチを圧縮の有無に関わらず MIME 形式で添付しないでください。多くのポ 2339544a2daSSeongJae Parkピュラーな電子メールクライアントは MIME 形式の添付ファイルをプレーンテ 2349544a2daSSeongJae Parkキストとして送信するとは限らないでしょう。そうなると、電子メールクラ 2359544a2daSSeongJae Parkイアントがコードに対するコメントを付けることをできなくします。また、 2369544a2daSSeongJae ParkMIME 形式の添付ファイルは Linus に手間を取らせることになり、その変更を 2379544a2daSSeongJae Park受け入れてもらう可能性が低くなってしまいます。 2389544a2daSSeongJae Park 2399544a2daSSeongJae Park例外:お使いの電子メールクライアントがパッチをめちゃくちゃにするので 2409544a2daSSeongJae Parkあれば、誰かが MIME 形式のパッチを再送するよう求めるかもしれません。 2419544a2daSSeongJae Park 2429544a2daSSeongJae Park余計な変更を加えずにあなたのパッチを送信するための電子メールクライアントの設定 2439544a2daSSeongJae Parkのヒントについては Documentation/process/email-clients.rst を参照してください。 2449544a2daSSeongJae Park 2459544a2daSSeongJae Park8) 電子メールのサイズ 2469544a2daSSeongJae Park 2479544a2daSSeongJae Parkパッチを Linus へ送るときは常に #7 の手順に従ってください。 2489544a2daSSeongJae Park 2499544a2daSSeongJae Park大きなパッチはメーリングリストやメンテナにとって不親切です。パッチが 2509544a2daSSeongJae Park未圧縮で 300KB を超えるようであるなら、インターネット上のアクセス可能な 2519544a2daSSeongJae Parkサーバに保存し、保存場所を示す URL を伝えるほうが適切です。 2529544a2daSSeongJae Park 2539544a2daSSeongJae Park9) カーネルバージョンの明記 2549544a2daSSeongJae Park 2559544a2daSSeongJae Parkパッチが対象とするカーネルのバージョンをパッチの概要か電子メールの 2569544a2daSSeongJae Parkサブジェクトに付けることが重要です。 2579544a2daSSeongJae Park 2589544a2daSSeongJae Parkパッチが最新バージョンのカーネルに正しく適用できなければ、Linus は 2599544a2daSSeongJae Parkそのパッチを採用しないでしょう。 2609544a2daSSeongJae Park 2619544a2daSSeongJae Park10) がっかりせず再投稿 2629544a2daSSeongJae Park 2639544a2daSSeongJae Parkパッチを投稿した後は、辛抱強く待っていてください。Linus があなたのパッ 2649544a2daSSeongJae Parkチを気に入って採用すれば、Linus がリリースする次のバージョンのカーネル 2659544a2daSSeongJae Parkの中で姿を見せるでしょう。 2669544a2daSSeongJae Park 2679544a2daSSeongJae Parkしかし、パッチが次のバージョンのカーネルに入っていないなら、いくつもの 2689544a2daSSeongJae Park理由があるのでしょう。その原因を絞り込み、間違っているものを正し、更新 2699544a2daSSeongJae Parkしたパッチを投稿するのはあなたの仕事です。 2709544a2daSSeongJae Park 2719544a2daSSeongJae ParkLinus があなたのパッチに対して何のコメントもなく不採用にすることは極め 2729544a2daSSeongJae Parkて普通のことです。それは自然な姿です。もし、Linus があなたのパッチを受 2739544a2daSSeongJae Parkけ取っていないのであれば、以下の理由が考えられます。 2749544a2daSSeongJae Park* パッチが最新バージョンの Linux カーネルにきちんと適用できなかった 2759544a2daSSeongJae Park* パッチが LKML で十分に議論されていなかった 2769544a2daSSeongJae Park* スタイルの問題(セクション2を参照) 2779544a2daSSeongJae Park* 電子メールフォーマットの問題(このセクションを参照) 2789544a2daSSeongJae Park* パッチに対する技術的な問題 2799544a2daSSeongJae Park* Linus はたくさんの電子メールを受け取っているので、どさくさに紛れて見 2809544a2daSSeongJae Park 失った 2819544a2daSSeongJae Park* 不愉快にさせている 2829544a2daSSeongJae Park 2839544a2daSSeongJae Park判断できない場合は、LKML にコメントを頼んでください。 2849544a2daSSeongJae Park 2859544a2daSSeongJae Park11) サブジェクトに「 PATCH 」 2869544a2daSSeongJae Park 2879544a2daSSeongJae ParkLinus や LKML への大量の電子メールのために、サブジェクトのプレフィックスに 2889544a2daSSeongJae Park「 [PATCH] 」を付けることが慣習となっています。これによって Linus や他の 2899544a2daSSeongJae Parkカーネル開発者がパッチであるのか、又は、他の議論に関する電子メールであるの 2909544a2daSSeongJae Parkかをより簡単に識別できます。 2919544a2daSSeongJae Park 2929544a2daSSeongJae Park12) パッチへの署名 2939544a2daSSeongJae Park 2949544a2daSSeongJae Park誰が何をしたのかを追いかけやすくするために (特に、パッチが何人かの 2959544a2daSSeongJae Parkメンテナを経て最終的に Linux カーネルに取り込まれる場合のために)、電子 2969544a2daSSeongJae Parkメールでやり取りされるパッチに対して「 sign-off 」という手続きを導入し 2979544a2daSSeongJae Parkました。 2989544a2daSSeongJae Park 2999544a2daSSeongJae Park「 sign-off 」とは、パッチがあなたの書いたものであるか、あるいは、 3009544a2daSSeongJae Parkあなたがそのパッチをオープンソースとして提供する権利を保持している、 3019544a2daSSeongJae Parkという証明をパッチの説明の末尾に一行記載するというものです。 3029544a2daSSeongJae Parkルールはとても単純です。以下の項目を確認して下さい。 3039544a2daSSeongJae Park 3049544a2daSSeongJae Park 原作者の証明書( DCO ) 1.1 3059544a2daSSeongJae Park 3069544a2daSSeongJae Park このプロジェクトに寄与するものとして、以下のことを証明する。 3079544a2daSSeongJae Park 3089544a2daSSeongJae Park (a) 本寄与は私が全体又は一部作成したものであり、私がそのファイ 3099544a2daSSeongJae Park ル中に明示されたオープンソースライセンスの下で公開する権利 3109544a2daSSeongJae Park を持っている。もしくは、 3119544a2daSSeongJae Park 3129544a2daSSeongJae Park (b) 本寄与は、私が知る限り、適切なオープンソースライセンスでカバ 3139544a2daSSeongJae Park ーされている既存の作品を元にしている。同時に、私はそのライセ 3149544a2daSSeongJae Park ンスの下で、私が全体又は一部作成した修正物を、ファイル中で示 3159544a2daSSeongJae Park される同一のオープンソースライセンスで(異なるライセンスの下で 3169544a2daSSeongJae Park 投稿することが許可されている場合を除いて)投稿する権利を持って 3179544a2daSSeongJae Park いる。もしくは、 3189544a2daSSeongJae Park 3199544a2daSSeongJae Park (c) 本寄与は(a)、(b)、(c)を証明する第3者から私へ直接提供された 3209544a2daSSeongJae Park ものであり、私はそれに変更を加えていない。 3219544a2daSSeongJae Park 3229544a2daSSeongJae Park (d) 私はこのプロジェクトと本寄与が公のものであることに理解及び同意す 3239544a2daSSeongJae Park る。同時に、関与した記録(投稿の際の全ての個人情報と sign-off を 3249544a2daSSeongJae Park 含む)が無期限に保全されることと、当該プロジェクト又は関連する 3259544a2daSSeongJae Park オープンソースライセンスに沿った形で再配布されることに理解及び 3269544a2daSSeongJae Park 同意する。 3279544a2daSSeongJae Park 3289544a2daSSeongJae Parkもしこれに同意できるなら、以下のような1行を追加してください。 3299544a2daSSeongJae Park 3309544a2daSSeongJae Park Signed-off-by: Random J Developer <random@developer.example.org> 3319544a2daSSeongJae Park 3329544a2daSSeongJae Park実名を使ってください。(残念ですが、偽名や匿名による寄与はできません。) 3339544a2daSSeongJae Park 3349544a2daSSeongJae Park人によっては sign-off の近くに追加のタグを付加しています。それらは今のところ 3359544a2daSSeongJae Park無視されますが、あなたはそのタグを社内の手続きに利用したり、sign-off に特別 3369544a2daSSeongJae Parkな情報を示したりすることができます。 3379544a2daSSeongJae Park 3389544a2daSSeongJae Parkあなたがサブシステムまたはブランチのメンテナであれば、受け取ったパッチを自身の 3399544a2daSSeongJae Parkツリーにマージするために、わずかに変更が必要となる場合があります。なぜなら 3409544a2daSSeongJae Parkあなたのツリーの中のコードと投稿者のツリーの中のコードは同一ではないためです。 3419544a2daSSeongJae Parkもし、あなたが厳密に上記ルール(c)にこだわるのであれば、投稿者に再度差分を 3429544a2daSSeongJae Parkとるよう依頼すべきです。しかし、これは時間とエネルギーを非生産的に浪費する 3439544a2daSSeongJae Parkことになります。ルール(b)はあなたにコードを修正する権利を与えてくれます。 3449544a2daSSeongJae Parkしかし、投稿者のコードを修正し、その修正によるバグを投稿者に押し付けてしまう 3459544a2daSSeongJae Parkことはとても失礼なことです。この問題を解決するために、末尾の投稿者の 3469544a2daSSeongJae ParkSigned-off-by とあなたがその末尾に追加する Signed-off-by の間に、修正を 3479544a2daSSeongJae Park加えたことを示す1行を追加することが推奨されています。 3489544a2daSSeongJae Park(その1行の書き方に)決まりはありませんが、大括弧の中に電子メールアドレスや氏名 3499544a2daSSeongJae Parkと修正内容を記載するやり方は目につきやすく、最終段階での変更の責任があなたに 3509544a2daSSeongJae Parkあることを明確にするのに十分な方法のようです。例えば、 3519544a2daSSeongJae Park 3529544a2daSSeongJae Park Signed-off-by: Random J Developer <random@developer.example.org> 3539544a2daSSeongJae Park [lucky@maintainer.example.org: struct foo moved from foo.c to foo.h] 3549544a2daSSeongJae Park Signed-off-by: Lucky K Maintainer <lucky@maintainer.example.org> 3559544a2daSSeongJae Park 3569544a2daSSeongJae Parkあなたが安定版のブランチを管理しており、作成者のクレジット、変更の追跡、 3579544a2daSSeongJae Park修正のマージ、と同時に苦情からの投稿者の保護を行いたい場合、この慣習は特に 3589544a2daSSeongJae Park有用となります。いかなる事情があってもチェンジログに出てくる作成者の 3599544a2daSSeongJae Parkアイデンティティ情報(From ヘッダ)は変更できないことに注意してください。 3609544a2daSSeongJae Park 3619544a2daSSeongJae Parkバックポートする人のための特別な注意事項。追跡を容易に行うために、コミット 3629544a2daSSeongJae Parkメッセージのトップ(サブジェクト行のすぐ後)にパッチの起源を示す情報を記述する 3639544a2daSSeongJae Parkことは一般的で有用な慣習です。例えば、これは 2.6-stable ツリーでの一例です。 3649544a2daSSeongJae Park 3659544a2daSSeongJae Park Date: Tue May 13 19:10:30 2008 +0000 3669544a2daSSeongJae Park 3679544a2daSSeongJae Park SCSI: libiscsi regression in 2.6.25: fix nop timer handling 3689544a2daSSeongJae Park 3699544a2daSSeongJae Park commit 4cf1043593db6a337f10e006c23c69e5fc93e722 upstream 3709544a2daSSeongJae Park 3719544a2daSSeongJae Parkそして、これは 2.4 ツリーでの一例です。 3729544a2daSSeongJae Park 3739544a2daSSeongJae Park Date: Tue May 13 22:12:27 2008 +0200 3749544a2daSSeongJae Park 3759544a2daSSeongJae Park wireless, airo: waitbusy() won't delay 3769544a2daSSeongJae Park 3779544a2daSSeongJae Park [backport of 2.6 commit b7acbdfbd1f277c1eb23f344f899cfa4cd0bf36a] 3789544a2daSSeongJae Park 3799544a2daSSeongJae Parkどんな形式であれ、この情報はあなたのツリーを追跡する人やあなたのツリーのバグを 3809544a2daSSeongJae Park解決しようとしている人にとって価値のある支援となります。 3819544a2daSSeongJae Park 3829544a2daSSeongJae Park13) いつ Acked-by: と Cc: を使うのか 3839544a2daSSeongJae Park 3849544a2daSSeongJae Park「 Signed-off-by: 」タグはその署名者がパッチの開発に関わっていたことやパッチ 3859544a2daSSeongJae Parkの伝播パスにいたことを示しています。 3869544a2daSSeongJae Park 3879544a2daSSeongJae Parkある人が直接パッチの準備や作成に関わっていないけれど、その人のパッチに対す 3889544a2daSSeongJae Parkる承認を記録し、示したいとします。その場合、その人を示すのに Acked-by: が使 3899544a2daSSeongJae Parkえます。Acked-by: はパッチのチェンジログにも追加されます。 3909544a2daSSeongJae Park 3919544a2daSSeongJae Parkパッチの影響を受けるコードのメンテナがパッチに関わっていなかったり、パッチ 3929544a2daSSeongJae Parkの伝播パスにいなかった時にも、メンテナは Acked-by: をしばしば利用します。 3939544a2daSSeongJae Park 3949544a2daSSeongJae ParkAcked-by: は Signed-off-by: のように公式なタグではありません。それはメンテナが 3959544a2daSSeongJae Park少なくともパッチをレビューし、同意を示しているという記録です。そのような 3969544a2daSSeongJae Parkことからパッチをマージする人がメンテナの「うん、良いと思うよ」という発言を 3979544a2daSSeongJae ParkAcked-by: へ置き換えることがあります。 3989544a2daSSeongJae Park 3999544a2daSSeongJae ParkAcked-by: が必ずしもパッチ全体の承認を示しているわけではありません。例えば、 4009544a2daSSeongJae Parkあるパッチが複数のサブシステムへ影響を与えており、その中の1つのサブシステム 4019544a2daSSeongJae Parkのメンテナからの Acked-by: を持っているとします。その場合、Acked-by: は通常 4029544a2daSSeongJae Parkそのメンテナのコードに影響を与える一部分だけに対する承認を示しています。 4039544a2daSSeongJae Parkこの点は、ご自分で判断してください。(その Acked-by: が)疑わしい場合は、 4049544a2daSSeongJae Parkメーリングリストアーカイブの中の大元の議論を参照すべきです。 4059544a2daSSeongJae Park 4069544a2daSSeongJae Parkパッチにコメントする機会を持っていたが、その時にコメントしなかった人がいれば、 4079544a2daSSeongJae Parkその人を指す「Cc:」タグを任意で追加してもかまいません。これは指定された人からの 4089544a2daSSeongJae Park明確なアクションなしに付与できる唯一のタグです。 4099544a2daSSeongJae Parkこのタグはパッチに関心があると思われる人達がそのパッチの議論に含まれていたこと 4109544a2daSSeongJae Parkを明文化します。 4119544a2daSSeongJae Park 412fccf0cc9SAkira Yokosawa14) Reported-by:, Tested-by:, Reviewed-by: および Suggested-by: の利用 4139544a2daSSeongJae Park 4149544a2daSSeongJae Park他の誰かによって報告された問題を修正するパッチであれば、問題報告者という寄与を 4159544a2daSSeongJae Parkクレジットするために、Reported-by: タグを追加することを検討してください。 4169544a2daSSeongJae Parkこまめにバグ報告者をクレジットしていくことで、うまくいけばその人たちが将来再び 4179544a2daSSeongJae Parkコミュニティの力となってくれるでしょう。 4189544a2daSSeongJae Parkただし、報告者の許可無くこのタグを追加しないように注意してください。特に、 4199544a2daSSeongJae Park問題が公の場で報告されていなかったのであれば。 4209544a2daSSeongJae Park 4219544a2daSSeongJae ParkTested-by: タグはタグで指定された人によって(ある環境下で)パッチのテストに成功 4229544a2daSSeongJae Parkしていることを示します。このタグはメンテナにテストが実施済みであることを 4239544a2daSSeongJae Park知らせ、将来の関連パッチのテスト協力者を見つける方法を提供し、テスト実施者に 4249544a2daSSeongJae Park対するクレジットを保証します。 4259544a2daSSeongJae Park 4269544a2daSSeongJae ParkReviewed-by: タグは、それとは異なり、下記のレビューア宣言の下にレビューされ、 4279544a2daSSeongJae Park受け入れ可能とみなされたパッチであることを示します。 4289544a2daSSeongJae Park 4299544a2daSSeongJae Park レビューアによる監督宣言 4309544a2daSSeongJae Park 4319544a2daSSeongJae Park 私は Reviewed-by: タグを提示することによって、以下のことを明言する。 4329544a2daSSeongJae Park 4339544a2daSSeongJae Park (a) 私はメインラインカーネルへの統合に向け、その妥当性及び「即応性 4349544a2daSSeongJae Park (訳注)」を検証し、技術的側面からパッチをレビュー済みである。 4359544a2daSSeongJae Park 4369544a2daSSeongJae Park 訳注: 4379544a2daSSeongJae Park 「即応性」の原文は "readiness"。 4389544a2daSSeongJae Park パッチが十分な品質を持っており、メインラインカーネルへの統合を即座に 4399544a2daSSeongJae Park 行うことができる状態であるかどうかを "readiness" という単語で表現 4409544a2daSSeongJae Park している。 4419544a2daSSeongJae Park 4429544a2daSSeongJae Park (b) パッチに関するあらゆる問題、懸念、あるいは、疑問は投稿者へ伝達済み 4439544a2daSSeongJae Park である。私はそれらのコメントに対する投稿者の返答に満足している。 4449544a2daSSeongJae Park 4459544a2daSSeongJae Park (c) 投稿に伴い改良されるコードがある一方で、現時点で、私は(1)それが 4469544a2daSSeongJae Park カーネルにとって価値のある変更であること、そして、(2)統合に際して 4479544a2daSSeongJae Park 議論になり得るような問題はないものと確信している。 4489544a2daSSeongJae Park 4499544a2daSSeongJae Park (d) 私はパッチをレビューし適切であると確信している一方で、あらゆる 4509544a2daSSeongJae Park 状況においてその宣言した目的や機能が正しく実現することに関して、 4519544a2daSSeongJae Park いかなる保証もしない(特にどこかで明示しない限り)。 4529544a2daSSeongJae Park 453*be8ca5f4SDeming WangReviewed-by タグはそのパッチがカーネルに対して適切な修正であって、深刻な技術的 4549544a2daSSeongJae Park問題を残していないという意見の宣言です。興味のあるレビューアは誰でも(レビュー 4559544a2daSSeongJae Park作業を終えたら)パッチに対して Reviewed-by タグを提示できます。このタグは 4569544a2daSSeongJae Parkレビューアの寄与をクレジットする働き、レビューの進捗の度合いをメンテナに 4579544a2daSSeongJae Park知らせる働きを持ちます。そのパッチの領域に詳しく、そして、しっかりとした 4589544a2daSSeongJae Parkレビューを実施したレビューアによって提供される時、Reviewed-by: タグがあなたの 4599544a2daSSeongJae Parkパッチをカーネルにマージする可能性を高めるでしょう。 4609544a2daSSeongJae Park 461fccf0cc9SAkira YokosawaSuggested-by: タグは、パッチのアイデアがその人からの提案に基づくものである 462fccf0cc9SAkira Yokosawaことを示し、アイデアの提供をクレジットするものです。提案者の明示的な許可が 463fccf0cc9SAkira Yokosawaない場合、特にそのアイデアが公開のフォーラムで示されていない場合には、この 464fccf0cc9SAkira Yokosawaタグをつけないように注意してください。とはいえ、アイデアの提供者をこつこつ 465fccf0cc9SAkira Yokosawaクレジットしていけば、望むらくはその人たちが将来別の機会に再度力を貸す気に 466fccf0cc9SAkira Yokosawaなってくれるかもしれません。 467fccf0cc9SAkira Yokosawa 4689544a2daSSeongJae Park15) 標準的なパッチのフォーマット 4699544a2daSSeongJae Park 4709544a2daSSeongJae Park標準的なパッチのサブジェクトは以下のとおりです。 4719544a2daSSeongJae Park 4729544a2daSSeongJae Park Subject: [PATCH 001/123] subsystem: summary phrase 4739544a2daSSeongJae Park 4749544a2daSSeongJae Park標準的なパッチの、電子メールのボディは以下の項目を含んでいます。 4759544a2daSSeongJae Park 4769544a2daSSeongJae Park - パッチの作成者を明記する「 from 」行 4779544a2daSSeongJae Park 4789544a2daSSeongJae Park - 空行 4799544a2daSSeongJae Park 4809544a2daSSeongJae Park - 説明本体。これはこのパッチを説明するために無期限のチェンジログ 4819544a2daSSeongJae Park (変更履歴)にコピーされます。 4829544a2daSSeongJae Park 4839544a2daSSeongJae Park - 上述した「 Signed-off-by: 」行。これも説明本体と同じくチェン 4849544a2daSSeongJae Park ジログ内にコピーされます。 4859544a2daSSeongJae Park 4869544a2daSSeongJae Park - マーカー行は単純に「 --- 」です。 4879544a2daSSeongJae Park 4889544a2daSSeongJae Park - 余計なコメントは、チェンジログには不適切です。 4899544a2daSSeongJae Park 4909544a2daSSeongJae Park - 実際のパッチ(差分出力) 4919544a2daSSeongJae Park 4929544a2daSSeongJae Parkサブジェクト行のフォーマットは、アルファベット順で電子メールをとても 4939544a2daSSeongJae Parkソートしやすいものになっています。(ほとんどの電子メールクライアント 4949544a2daSSeongJae Parkはソートをサポートしています)パッチのサブジェクトの連番は0詰めであ 4959544a2daSSeongJae Parkるため、数字でのソートとアルファベットでのソートは同じ結果になります。 4969544a2daSSeongJae Park 4979544a2daSSeongJae Park電子メールのサブジェクト内のサブシステム表記は、パッチが適用される 4989544a2daSSeongJae Park分野またはサブシステムを識別できるようにすべきです。 4999544a2daSSeongJae Park 5009544a2daSSeongJae Park電子メールのサブジェクトの「summary phrase」はそのパッチの概要を正確 5019544a2daSSeongJae Parkに表現しなければなりません。「summary phrase」をファイル名にしてはい 5029544a2daSSeongJae Parkけません。パッチシリーズ中でそれぞれのパッチは同じ「summary phrase」を 5039544a2daSSeongJae Park使ってはいけません(「パッチシリーズ」とは順序付けられた関連のある複数の 5049544a2daSSeongJae Parkパッチ群です)。 5059544a2daSSeongJae Park 5069544a2daSSeongJae Parkあなたの電子メールの「summary phrase」がそのパッチにとって世界で唯一の識別子に 5079544a2daSSeongJae Parkなるように心がけてください。「summary phrase」は git のチェンジログの中へ 5089544a2daSSeongJae Parkずっと伝播していきます。「summary phrase」は、開発者が後でパッチを参照する 5099544a2daSSeongJae Parkために議論の中で利用するかもしれません。 5109544a2daSSeongJae Park人々はそのパッチに関連した議論を読むために「summary phrase」を使って google で 5119544a2daSSeongJae Park検索したがるでしょう。それはまた2、3ヶ月あとで、人々が「gitk」や 5129544a2daSSeongJae Park「git log --oneline」のようなツールを使用して何千ものパッチに目を通す時、 5139544a2daSSeongJae Park唯一目にとまる情報となるでしょう。 5149544a2daSSeongJae Park 5159544a2daSSeongJae Parkこれらの理由のため、「summary phrase」はなぜパッチが必要であるか、パッチが何を 5169544a2daSSeongJae Park変更するかの2つの情報をせいぜい70〜75文字で表現していなければなりません。 5179544a2daSSeongJae Park「summary phrase」は簡潔であり説明的である表現を目指しつつ、うまく 5189544a2daSSeongJae Parkまとめられている概要となるべきです。 5199544a2daSSeongJae Park 5209544a2daSSeongJae Park「summary phrase」は「Subject: [PATCH tag] <summary phrase>」のように、 5219544a2daSSeongJae Park大括弧で閉じられたタグを接頭辞として付加してもかまいません。このタグは 5229544a2daSSeongJae Park「summary phrase」の一部とは考えませんが、パッチをどのように取り扱うべきかを 5239544a2daSSeongJae Park表現します。 5249544a2daSSeongJae Park一般的には「v1, v2, v3」のようなバージョン情報を表すタグ(過去のパッチに対する 5259544a2daSSeongJae Parkコメントを反映するために複数のバージョンのパッチが投稿されているのであれば)、 5269544a2daSSeongJae Park「RFC」のようなコメントを要求するタグが挙げられます。パッチシリーズとして4つの 5279544a2daSSeongJae Parkパッチがあれば、個々のパッチに「1/4, 2/4, 3/4, 4/4」のように番号を付けても 5289544a2daSSeongJae Parkかまいません。これは開発者がパッチを適用する順番を確実に把握するためです。 5299544a2daSSeongJae Parkそして、開発者がパッチシリーズの中のすべてのパッチをもらさずレビュー或いは 5309544a2daSSeongJae Park適用するのを保証するためです。 5319544a2daSSeongJae Park 5329544a2daSSeongJae Parkサブジェクトの例を二つ 5339544a2daSSeongJae Park 5349544a2daSSeongJae Park Subject: [patch 2/5] ext2: improve scalability of bitmap searching 5359544a2daSSeongJae Park Subject: [PATCHv2 001/207] x86: fix eflags tracking 5369544a2daSSeongJae Park 5379544a2daSSeongJae Park「 from 」行は電子メールのボディの一番最初の行でなければなりません。 5389544a2daSSeongJae Parkその形式は以下のとおりです。 5399544a2daSSeongJae Park 5409544a2daSSeongJae Park From: Original Author <author@example.com> 5419544a2daSSeongJae Park 5429544a2daSSeongJae Park「 from 」行はチェンジログの中で、そのパッチの作成者としてクレジットされ 5439544a2daSSeongJae Parkている人を特定するものです。「 from 」行がかけていると、電子メールのヘッ 5449544a2daSSeongJae Parkダーの「 From: 」が、チェンジログの中でパッチの作成者を決定するために使わ 5459544a2daSSeongJae Parkれるでしょう。 5469544a2daSSeongJae Park 5479544a2daSSeongJae Park説明本体は無期限のソースのチェンジログにコミットされます。なので、説明 5489544a2daSSeongJae Park本体はそのパッチに至った議論の詳細を忘れているある程度の技量を持っている人 5499544a2daSSeongJae Parkがその詳細を思い出すことができるものでなければなりません。パッチが対処する 5509544a2daSSeongJae Park障害の症状(カーネルログメッセージや oops メッセージ等)を記載することは問題に 5519544a2daSSeongJae Park対処可能なパッチを求めてコミットログを検索する人々にとって特に有用です。 5529544a2daSSeongJae Parkパッチがコンパイル問題を解決するのであれば、そのパッチを探している人が見つける 5539544a2daSSeongJae Parkことができる情報だけで十分であり、コンパイル時の全てのエラーを含める必要は 5549544a2daSSeongJae Parkありません。「summary phrase」と同様に、簡潔であり説明的であることが重要です。 5559544a2daSSeongJae Park 5569544a2daSSeongJae Park「 --- 」マーカー行はパッチ処理ツールに対して、チェンジログメッセージの終端 5579544a2daSSeongJae Park部分を認識させるという重要な役目を果たします。 5589544a2daSSeongJae Park 5599544a2daSSeongJae Park「 --- 」マーカー行の後の追加コメントの良い使用方法の1つに diffstat コマンド 5609544a2daSSeongJae Parkがあります。diffstat コマンドとは何のファイルが変更され、1ファイル当たり何行 5619544a2daSSeongJae Park追加され何行消されたかを示すものです。diffstat コマンドは特に大きなパッチに 5629544a2daSSeongJae Parkおいて役立ちます。その時点でだけ又はメンテナにとってのみ関係のあるコメント 5639544a2daSSeongJae Parkは無期限に保存されるチェンジログにとって適切ではありません。そのため、この 5649544a2daSSeongJae Parkようなコメントもマーカー行の後に書かれるべきです。 5659544a2daSSeongJae Parkこのようなコメントの良い例として、v1 と v2 のバージョン間で何が変更されたかを 5669544a2daSSeongJae Park表す「パッチの変更履歴」が挙げられます。 5679544a2daSSeongJae Park 5689544a2daSSeongJae Park「 --- 」マーカー行の後に diffstat コマンドの結果を含めるのであれば、ファイル 5699544a2daSSeongJae Park名はカーネルソースツリーのトップディレクトリからの表記で列記されるため、横方向 5709544a2daSSeongJae Parkのスペースをとり過ぎないように、diffstat コマンドにオプション「 -p 1 -w 70 」 5719544a2daSSeongJae Parkを指定してください(インデントを含めてちょうど80列に合うでしょう)。 5729544a2daSSeongJae Park 5739544a2daSSeongJae Park適切なパッチのフォーマットの詳細についてはセクション3の参考文献を参照して 5749544a2daSSeongJae Parkください。 5759544a2daSSeongJae Park 5769544a2daSSeongJae Park16) 「git pull」要求の送り方(Linus の電子メールから) 5779544a2daSSeongJae Park 5789544a2daSSeongJae Park間違ったブランチから引っ張るのを防ぐために、git リポジトリのアドレスと 5799544a2daSSeongJae Parkブランチ名を同じ行に1行で記載してください。そうすることで、3回の連続クリック 5809544a2daSSeongJae Parkで全て選択できます。 5819544a2daSSeongJae Park 5829544a2daSSeongJae Park正しい形式は下記の通りです。 5839544a2daSSeongJae Park 5849544a2daSSeongJae Park "Please pull from 5859544a2daSSeongJae Park 5869544a2daSSeongJae Park git://jdelvare.pck.nerim.net/jdelvare-2.6 i2c-for-linus 5879544a2daSSeongJae Park 5889544a2daSSeongJae Park to get these changes:" 5899544a2daSSeongJae Park 5909544a2daSSeongJae Parkその結果、アドレスを自分自身でタイピングして間違えることはなくなります(実際に、 5919544a2daSSeongJae Park何度か間違ったブランチから引っ張ってきてしまい、その時に diffstat の結果を 5929544a2daSSeongJae Park検証して間違っていることに気づいたことがあります。どこから何を引っ張るべきかを 5939544a2daSSeongJae Park「探したり」、正しいブランチ名かどうかを重ねてチェックしたりする必要が 5949544a2daSSeongJae Parkなくなればより快適になるでしょう)。 5959544a2daSSeongJae Park 5969544a2daSSeongJae Parkdiffstat の結果を生成するために「 git diff -M --stat --summary 」を使って 5979544a2daSSeongJae Parkください。-M オプションはファイル名の変更を検知でき、--summary オプションは 5989544a2daSSeongJae Park新規ファイル、削除されたファイル、名前が変更されたファイルの概要を生成します。 5999544a2daSSeongJae Park 6009544a2daSSeongJae Park-M オプション(ファイル名の変更検知)を指定すると、diffstat の結果はかなり 6019544a2daSSeongJae Park異なってきます。git は大規模な変更(追加と削除のペア)をファイル名の変更と 6029544a2daSSeongJae Park判断するためです。 6039544a2daSSeongJae Park 6049544a2daSSeongJae Park------------------------------------ 6059544a2daSSeongJae Parkセクション2 - ヒントとTIPSと小技 6069544a2daSSeongJae Park------------------------------------ 6079544a2daSSeongJae Park 6089544a2daSSeongJae Parkこのセクションは Linux カーネルに変更を適用することに関係のある一般的な 6099544a2daSSeongJae Park「お約束」の多くを載せています。物事には例外というものがあります。しか 6109544a2daSSeongJae Parkし例外を適用するには、本当に妥当な理由が不可欠です。あなたは恐らくこの 6119544a2daSSeongJae Parkセクションを Linus のコンピュータ・サイエンス101と呼ぶでしょう。 6129544a2daSSeongJae Park 6139544a2daSSeongJae Park1) Documentation/process/coding-style.rstを参照 6149544a2daSSeongJae Park 6159544a2daSSeongJae Park言うまでもなく、あなたのコードがこのコーディングスタイルからあまりに 6169544a2daSSeongJae Parkも逸脱していると、レビューやコメントなしに受け取ってもらえないかもし 6179544a2daSSeongJae Parkれません。 6189544a2daSSeongJae Park 6199544a2daSSeongJae Park特筆すべき例外は、コードをあるファイルから別のファイルに移動 6209544a2daSSeongJae Parkするときです。この場合、コードを移動するパッチでは、移動されるコード 6219544a2daSSeongJae Parkに関して移動以外の変更を一切加えるべきではありません。これにより、 6229544a2daSSeongJae Parkコードの移動とあなたが行ったコードの修正を明確に区別できるようにな 6239544a2daSSeongJae Parkります。これは実際に何が変更されたかをレビューする際の大きな助けに 6249544a2daSSeongJae Parkなるとともに、ツールにコードの履歴を追跡させることも容易になります。 6259544a2daSSeongJae Park 6269544a2daSSeongJae Park投稿するより前にパッチのスタイルチェッカー( scripts/checkpatch.pl )で 6279544a2daSSeongJae Parkあなたのパッチをチェックしてください。このスタイルチェッカーは最終結 6289544a2daSSeongJae Park論としてではなく、指標としてみるべきです。もし、あなたのコードが違反 6299544a2daSSeongJae Parkはしているが修正するより良く見えるのであれば、おそらくそのままにする 6309544a2daSSeongJae Parkのがベストです。 6319544a2daSSeongJae Park 6329544a2daSSeongJae Parkスタイルチェッカーによる3段階のレポート: 6339544a2daSSeongJae Park - エラー: 間違っている可能性が高い 6349544a2daSSeongJae Park - 警告:注意してレビューする必要がある 6359544a2daSSeongJae Park - チェック:考慮する必要がある 6369544a2daSSeongJae Park 6379544a2daSSeongJae Parkあなたはパッチに残っている全ての違反について、それがなぜ必要なのか正当な 6389544a2daSSeongJae Park理由を示せるようにしておく必要があります。 6399544a2daSSeongJae Park 6409544a2daSSeongJae Park2) #ifdefは見苦しい 6419544a2daSSeongJae Park 6429544a2daSSeongJae Parkifdef が散乱したコードは、読むのもメンテナンスするのも面倒です。コードの中 6439544a2daSSeongJae Parkで ifdef を使わないでください。代わりに、ヘッダファイルの中に ifdef を入れて、 6449544a2daSSeongJae Park条件付きで、コードの中で使われる関数を「 static inline 」関数かマクロで定義し 6459544a2daSSeongJae Parkてください。後はコンパイラが、何もしない箇所を最適化して取り去ってくれるで 6469544a2daSSeongJae Parkしょう。 6479544a2daSSeongJae Park 6489544a2daSSeongJae Parkまずいコードの簡単な例 6499544a2daSSeongJae Park 6509544a2daSSeongJae Park dev = alloc_etherdev (sizeof(struct funky_private)); 6519544a2daSSeongJae Park if (!dev) 6529544a2daSSeongJae Park return -ENODEV; 6539544a2daSSeongJae Park #ifdef CONFIG_NET_FUNKINESS 6549544a2daSSeongJae Park init_funky_net(dev); 6559544a2daSSeongJae Park #endif 6569544a2daSSeongJae Park 6579544a2daSSeongJae Parkクリーンアップしたコードの例 6589544a2daSSeongJae Park 6599544a2daSSeongJae Park(in header) 6609544a2daSSeongJae Park #ifndef CONFIG_NET_FUNKINESS 6619544a2daSSeongJae Park static inline void init_funky_net (struct net_device *d) {} 6629544a2daSSeongJae Park #endif 6639544a2daSSeongJae Park 6649544a2daSSeongJae Park(in the code itself) 6659544a2daSSeongJae Park dev = alloc_etherdev (sizeof(struct funky_private)); 6669544a2daSSeongJae Park if (!dev) 6679544a2daSSeongJae Park return -ENODEV; 6689544a2daSSeongJae Park init_funky_net(dev); 6699544a2daSSeongJae Park 6709544a2daSSeongJae Park3) マクロより「 static inline 」を推奨 6719544a2daSSeongJae Park 6729544a2daSSeongJae Park「 static inline 」関数はマクロよりもずっと推奨されています。それらは、 6739544a2daSSeongJae Park型安全性があり、長さにも制限が無く、フォーマットの制限もありません。 6749544a2daSSeongJae Parkgcc においては、マクロと同じくらい軽いです。 6759544a2daSSeongJae Park 6769544a2daSSeongJae Parkマクロは「 static inline 」が明らかに不適切であると分かる場所(高速化パスの 6779544a2daSSeongJae Parkいくつかの特定のケース)や「 static inline 」関数を使うことができないような 6789544a2daSSeongJae Park場所(マクロの引数の文字列連結のような)にだけ使われるべきです。 6799544a2daSSeongJae Park 6809544a2daSSeongJae Park「 static inline 」は「 static __inline__ 」や「 extern inline 」や 6819544a2daSSeongJae Park「 extern __inline__ 」よりも適切です。 6829544a2daSSeongJae Park 6839544a2daSSeongJae Park4) 設計に凝りすぎるな 6849544a2daSSeongJae Park 6859544a2daSSeongJae Parkそれが有用になるかどうか分からないような不明瞭な将来を見越した設計 6869544a2daSSeongJae Parkをしないでください。「できる限り簡単に、そして、それ以上簡単になら 6879544a2daSSeongJae Parkないような設計をしてください。」 6889544a2daSSeongJae Park 6899544a2daSSeongJae Park---------------------- 6909544a2daSSeongJae Parkセクション3 参考文献 6919544a2daSSeongJae Park---------------------- 6929544a2daSSeongJae Park 6939544a2daSSeongJae ParkAndrew Morton, "The perfect patch" (tpp). 6949544a2daSSeongJae Park <http://www.ozlabs.org/~akpm/stuff/tpp.txt> 6959544a2daSSeongJae Park 6969544a2daSSeongJae ParkJeff Garzik, "Linux kernel patch submission format". 6975aff7c46SJacob Huisman <https://web.archive.org/web/20180829112450/http://linux.yyz.us/patch-format.html> 6989544a2daSSeongJae Park 6999544a2daSSeongJae ParkGreg Kroah-Hartman, "How to piss off a kernel subsystem maintainer". 700039d5926SAkira Yokosawa <http://www.kroah.com/log/linux/maintainer.html> 701039d5926SAkira Yokosawa <http://www.kroah.com/log/linux/maintainer-02.html> 702039d5926SAkira Yokosawa <http://www.kroah.com/log/linux/maintainer-03.html> 703039d5926SAkira Yokosawa <http://www.kroah.com/log/linux/maintainer-04.html> 704039d5926SAkira Yokosawa <http://www.kroah.com/log/linux/maintainer-05.html> 7059544a2daSSeongJae Park 7069544a2daSSeongJae ParkNO!!!! No more huge patch bombs to linux-kernel@vger.kernel.org people! 70705a5f51cSJoe Perches <https://lore.kernel.org/r/20050711.125305.08322243.davem@davemloft.net> 7089544a2daSSeongJae Park 7099544a2daSSeongJae ParkKernel Documentation/process/coding-style.rst: 7109544a2daSSeongJae Park <http://users.sosdg.org/~qiyong/lxr/source/Documentation/process/coding-style.rst> 7119544a2daSSeongJae Park 7129544a2daSSeongJae ParkLinus Torvalds's mail on the canonical patch format: 71305a5f51cSJoe Perches <https://lore.kernel.org/r/Pine.LNX.4.58.0504071023190.28951@ppc970.osdl.org> 7149544a2daSSeongJae Park 7159544a2daSSeongJae ParkAndi Kleen, "On submitting kernel patches" 7169544a2daSSeongJae Park Some strategies to get difficult or controversial changes in. 7179544a2daSSeongJae Park http://halobates.de/on-submitting-patches.pdf 7189544a2daSSeongJae Park 7199544a2daSSeongJae Park-- 7209544a2daSSeongJae Park 7219544a2daSSeongJae Park 722