1*4882a593SmuzhiyunNOTE: 2*4882a593SmuzhiyunThis is a version of Documentation/process/submitting-patches.rst into Japanese. 3*4882a593SmuzhiyunThis document is maintained by Keiichi KII <k-keiichi@bx.jp.nec.com> 4*4882a593Smuzhiyunand the JF Project team <http://www.linux.or.jp/JF/>. 5*4882a593SmuzhiyunIf you find any difference between this document and the original file 6*4882a593Smuzhiyunor a problem with the translation, 7*4882a593Smuzhiyunplease contact the maintainer of this file or JF project. 8*4882a593Smuzhiyun 9*4882a593SmuzhiyunPlease also note that the purpose of this file is to be easier to read 10*4882a593Smuzhiyunfor non English (read: Japanese) speakers and is not intended as a 11*4882a593Smuzhiyunfork. So if you have any comments or updates of this file, please try 12*4882a593Smuzhiyunto update the original English file first. 13*4882a593Smuzhiyun 14*4882a593SmuzhiyunLast Updated: 2011/06/09 15*4882a593Smuzhiyun 16*4882a593Smuzhiyun================================== 17*4882a593Smuzhiyunこれは、 18*4882a593Smuzhiyunlinux-2.6.39/Documentation/process/submitting-patches.rst の和訳 19*4882a593Smuzhiyunです。 20*4882a593Smuzhiyun翻訳団体: JF プロジェクト < http://www.linux.or.jp/JF/ > 21*4882a593Smuzhiyun翻訳日: 2011/06/09 22*4882a593Smuzhiyun翻訳者: Keiichi Kii <k-keiichi at bx dot jp dot nec dot com> 23*4882a593Smuzhiyun校正者: Masanari Kobayashi さん <zap03216 at nifty dot ne dot jp> 24*4882a593Smuzhiyun Matsukura さん <nbh--mats at nifty dot com> 25*4882a593Smuzhiyun Takeshi Hamasaki さん <hmatrjp at users dot sourceforge dot jp> 26*4882a593Smuzhiyun================================== 27*4882a593Smuzhiyun 28*4882a593Smuzhiyun Linux カーネルに変更を加えるための Howto 29*4882a593Smuzhiyun 又は 30*4882a593Smuzhiyun かの Linus Torvalds の取り扱い説明書 31*4882a593Smuzhiyun 32*4882a593SmuzhiyunLinux カーネルに変更を加えたいと思っている個人又は会社にとって、パッ 33*4882a593Smuzhiyunチの投稿に関連した仕組みに慣れていなければ、その過程は時々みなさんを 34*4882a593Smuzhiyunおじけづかせることもあります。この文章はあなたの変更を大いに受け入れ 35*4882a593Smuzhiyunてもらえやすくする提案を集めたものです。 36*4882a593Smuzhiyun 37*4882a593Smuzhiyunコードを投稿する前に、Documentation/process/submit-checklist.rst の項目リストに目 38*4882a593Smuzhiyunを通してチェックしてください。もしあなたがドライバーを投稿しようとし 39*4882a593Smuzhiyunているなら、Documentation/process/submitting-drivers.rst にも目を通してください。 40*4882a593Smuzhiyun 41*4882a593Smuzhiyun-------------------------------------------- 42*4882a593Smuzhiyunセクション1 パッチの作り方と送り方 43*4882a593Smuzhiyun-------------------------------------------- 44*4882a593Smuzhiyun 45*4882a593Smuzhiyun1) 「 diff -up 」 46*4882a593Smuzhiyun------------ 47*4882a593Smuzhiyun 48*4882a593Smuzhiyunパッチの作成には「 diff -up 」又は「 diff -uprN 」を使ってください。 49*4882a593Smuzhiyun 50*4882a593SmuzhiyunLinux カーネルに対する全ての変更は diff(1) コマンドによるパッチの形式で 51*4882a593Smuzhiyun生成してください。パッチを作成するときには、diff(1) コマンドに「 -u 」引 52*4882a593Smuzhiyun数を指定して、unified 形式のパッチを作成することを確認してください。また、 53*4882a593Smuzhiyun変更がどの C 関数で行われたのかを表示する「 -p 」引数を使ってください。 54*4882a593Smuzhiyunこの引数は生成した差分をずっと読みやすくしてくれます。パッチは Linux 55*4882a593Smuzhiyunカーネルソースの中のサブディレクトリではなく Linux カーネルソースのルート 56*4882a593Smuzhiyunディレクトリを基準にしないといけません。 57*4882a593Smuzhiyun 58*4882a593Smuzhiyun1個のファイルについてのパッチを作成するためには、ほとんどの場合、 59*4882a593Smuzhiyun以下の作業を行えば十分です。 60*4882a593Smuzhiyun 61*4882a593Smuzhiyun SRCTREE=linux-2.6 62*4882a593Smuzhiyun MYFILE=drivers/net/mydriver.c 63*4882a593Smuzhiyun 64*4882a593Smuzhiyun cd $SRCTREE 65*4882a593Smuzhiyun cp $MYFILE $MYFILE.orig 66*4882a593Smuzhiyun vi $MYFILE # make your change 67*4882a593Smuzhiyun cd .. 68*4882a593Smuzhiyun diff -up $SRCTREE/$MYFILE{.orig,} > /tmp/patch 69*4882a593Smuzhiyun 70*4882a593Smuzhiyun複数のファイルについてのパッチを作成するためには、素の( vanilla )、す 71*4882a593Smuzhiyunなわち変更を加えてない Linux カーネルを展開し、自分の Linux カーネル 72*4882a593Smuzhiyunソースとの差分を生成しないといけません。例えば、 73*4882a593Smuzhiyun 74*4882a593Smuzhiyun MYSRC=/devel/linux-2.6 75*4882a593Smuzhiyun 76*4882a593Smuzhiyun tar xvfz linux-2.6.12.tar.gz 77*4882a593Smuzhiyun mv linux-2.6.12 linux-2.6.12-vanilla 78*4882a593Smuzhiyun diff -uprN -X linux-2.6.12-vanilla/Documentation/dontdiff \ 79*4882a593Smuzhiyun linux-2.6.12-vanilla $MYSRC > /tmp/patch 80*4882a593Smuzhiyun 81*4882a593Smuzhiyundontdiff ファイルには Linux カーネルのビルドプロセスの過程で生成された 82*4882a593Smuzhiyunファイルの一覧がのっています。そして、それらはパッチを生成する diff(1) 83*4882a593Smuzhiyunコマンドで無視されるべきです。dontdiff ファイルは 2.6.12 以後のバージョ 84*4882a593Smuzhiyunンの Linux カーネルソースツリーに含まれています。それより前のバージョン 85*4882a593Smuzhiyunの Linux カーネルソースツリーに対する dontdiff ファイルは、 86*4882a593Smuzhiyun<http://www.xenotime.net/linux/doc/dontdiff>から取得することができます。 87*4882a593Smuzhiyun 88*4882a593Smuzhiyun投稿するパッチの中に関係のない余分なファイルが含まれていないことを確 89*4882a593Smuzhiyun認してください。diff(1) コマンドで生成したパッチがあなたの意図したとお 90*4882a593Smuzhiyunりのものであることを確認してください。 91*4882a593Smuzhiyun 92*4882a593Smuzhiyunもしあなたのパッチが多くの差分を生み出すのであれば、あなたはパッチ 93*4882a593Smuzhiyunを意味のあるひとまとまりごとに分けたいと思うかもしれません。 94*4882a593Smuzhiyunこれは他のカーネル開発者にとってレビューしやすくなるので、あなたの 95*4882a593Smuzhiyunパッチを受け入れてもらうためにはとても重要なことです。これを補助でき 96*4882a593Smuzhiyunる多くのスクリプトがあります。 97*4882a593Smuzhiyun 98*4882a593SmuzhiyunQuilt: 99*4882a593Smuzhiyunhttp://savannah.nongnu.org/projects/quilt 100*4882a593Smuzhiyun 101*4882a593Smuzhiyun2) パッチに対する説明 102*4882a593Smuzhiyun 103*4882a593Smuzhiyunパッチの中の変更点に対する技術的な詳細について説明してください。 104*4882a593Smuzhiyun 105*4882a593Smuzhiyun説明はできる限り具体的に。もっとも悪い説明は「ドライバー X を更新」、 106*4882a593Smuzhiyun「ドライバー X に対するバグフィックス」あるいは「このパッチはサブシス 107*4882a593Smuzhiyunテム X に対する更新を含んでいます。どうか取り入れてください。」などです。 108*4882a593Smuzhiyun 109*4882a593Smuzhiyunパッチの説明を Linux カーネルのソースコードマネジメントシステム「 git 」の 110*4882a593Smuzhiyunコミットログとして簡単に引用できる形で書けば、メンテナから感謝されるでしょう。 111*4882a593Smuzhiyun以下の #15 を見てください。 112*4882a593Smuzhiyun 113*4882a593Smuzhiyun説明が長くなりだしたのであれば、おそらくそれはパッチを分ける必要がある 114*4882a593Smuzhiyunという兆候です。次の #3 を見てください。 115*4882a593Smuzhiyun 116*4882a593Smuzhiyunパッチ(シリーズ)を(再)投稿する時、十分なパッチの説明とそのパッチが必要な理由を 117*4882a593Smuzhiyunパッチに含めてください。ただ「これはパッチ(シリーズ)のバージョン N」とだけ 118*4882a593Smuzhiyun書かないでください。そして、パッチをマージする人にパッチの説明を探させそれを 119*4882a593Smuzhiyunパッチに追記させるため、過去のバージョンのパッチやそのパッチの URL を参照する 120*4882a593Smuzhiyun手間をかけさせないでください。 121*4882a593Smuzhiyunつまり、パッチシリーズとその説明は一緒にあるべきです。これはパッチをマージする 122*4882a593Smuzhiyun人、レビューする人、どちらのためにもなります。レビューする人の中には、おそらく 123*4882a593Smuzhiyun過去のバージョンのパッチを受け取ってもいない人がいます。 124*4882a593Smuzhiyun 125*4882a593Smuzhiyun登録済みのバグエントリを修正するパッチであれば、そのバグエントリを示すバグ ID 126*4882a593Smuzhiyunや URL を明記してください。 127*4882a593Smuzhiyun 128*4882a593Smuzhiyun3) パッチの分割 129*4882a593Smuzhiyun 130*4882a593Smuzhiyun意味のあるひとまとまりごとに変更を個々のパッチファイルに分けてください。 131*4882a593Smuzhiyun 132*4882a593Smuzhiyun例えば、もし1つのドライバーに対するバグフィックスとパフォーマンス強 133*4882a593Smuzhiyun化の両方の変更を含んでいるのであれば、その変更を2つ以上のパッチに分 134*4882a593Smuzhiyunけてください。もし変更箇所に API の更新と、その新しい API を使う新たな 135*4882a593Smuzhiyunドライバーが含まれているなら、2つのパッチに分けてください。 136*4882a593Smuzhiyun 137*4882a593Smuzhiyun一方で、もしあなたが多数のファイルに対して意味的に同じ1つの変更を加え 138*4882a593Smuzhiyunるのであれば、その変更を1つのパッチにまとめてください。言いかえると、 139*4882a593Smuzhiyun意味的に同じ1つの変更は1つのパッチの中に含まれます。 140*4882a593Smuzhiyun 141*4882a593Smuzhiyunあるパッチが変更を完結させるために他のパッチに依存していたとしても、 142*4882a593Smuzhiyunそれは問題ありません。パッチの説明の中で「このパッチはパッチ X に依存 143*4882a593Smuzhiyunしている」と簡単に注意書きをつけてください。 144*4882a593Smuzhiyun 145*4882a593Smuzhiyunもしパッチをより小さなパッチの集合に凝縮することができないなら、まずは 146*4882a593Smuzhiyun15かそこらのパッチを送り、そのレビューと統合を待って下さい。 147*4882a593Smuzhiyun 148*4882a593Smuzhiyun4) パッチのスタイルチェック 149*4882a593Smuzhiyun 150*4882a593Smuzhiyunあなたのパッチが基本的な( Linux カーネルの)コーディングスタイルに違反し 151*4882a593Smuzhiyunていないかをチェックして下さい。その詳細を Documentation/process/coding-style.rst で 152*4882a593Smuzhiyun見つけることができます。コーディングスタイルの違反はレビューする人の 153*4882a593Smuzhiyun時間を無駄にするだけなので、恐らくあなたのパッチは読まれることすらなく 154*4882a593Smuzhiyun拒否されるでしょう。 155*4882a593Smuzhiyun 156*4882a593Smuzhiyunあなたはパッチを投稿する前に最低限パッチスタイルチェッカー 157*4882a593Smuzhiyun( scripts/checkpatch.pl )を利用してパッチをチェックすべきです。 158*4882a593Smuzhiyunもしパッチに違反がのこっているならば、それらの全てについてあなたは正当な 159*4882a593Smuzhiyun理由を示せるようにしておく必要があります。 160*4882a593Smuzhiyun 161*4882a593Smuzhiyun5) 電子メールの宛先の選び方 162*4882a593Smuzhiyun 163*4882a593SmuzhiyunMAINTAINERS ファイルとソースコードに目を通してください。そして、その変 164*4882a593Smuzhiyun更がメンテナのいる特定のサブシステムに加えられるものであることが分か 165*4882a593Smuzhiyunれば、その人に電子メールを送ってください。 166*4882a593Smuzhiyun 167*4882a593Smuzhiyunもし、メンテナが載っていなかったり、メンテナからの応答がないなら、 168*4882a593SmuzhiyunLKML ( linux-kernel@vger.kernel.org )へパッチを送ってください。ほとんど 169*4882a593Smuzhiyunのカーネル開発者はこのメーリングリストに目を通しており、変更に対して 170*4882a593Smuzhiyunコメントを得ることができます。 171*4882a593Smuzhiyun 172*4882a593Smuzhiyun15個より多くのパッチを同時に vger.kernel.org のメーリングリストへ送らな 173*4882a593Smuzhiyunいでください!!! 174*4882a593Smuzhiyun 175*4882a593SmuzhiyunLinus Torvalds は Linux カーネルに入る全ての変更に対する最終的な意思決定者 176*4882a593Smuzhiyunです。電子メールアドレスは torvalds@linux-foundation.org になります。彼は 177*4882a593Smuzhiyun多くの電子メールを受け取っているため、できる限り彼に電子メールを送るのは 178*4882a593Smuzhiyun避けるべきです。 179*4882a593Smuzhiyun 180*4882a593Smuzhiyunバグフィックスであったり、自明な変更であったり、話し合いをほとんど 181*4882a593Smuzhiyun必要としないパッチは Linus へ電子メールを送るか CC しなければなりません。 182*4882a593Smuzhiyun話し合いを必要としたり、明確なアドバンテージがないパッチは、通常まず 183*4882a593Smuzhiyunは LKML へ送られるべきです。パッチが議論された後にだけ、そのパッチを 184*4882a593SmuzhiyunLinus へ送るべきです。 185*4882a593Smuzhiyun 186*4882a593Smuzhiyun6) CC (カーボンコピー)先の選び方 187*4882a593Smuzhiyun 188*4882a593Smuzhiyun特に理由がないなら、LKML にも CC してください。 189*4882a593Smuzhiyun 190*4882a593SmuzhiyunLinus 以外のカーネル開発者は変更に気づく必要があり、その結果、彼らはそ 191*4882a593Smuzhiyunの変更に対してコメントをくれたり、コードに対してレビューや提案をくれ 192*4882a593Smuzhiyunるかもしれません。LKML とは Linux カーネル開発者にとって一番中心的なメー 193*4882a593Smuzhiyunリングリストです。USB やフレームバッファデバイスや VFS や SCSI サブシステ 194*4882a593Smuzhiyunムなどの特定のサブシステムに関するメーリングリストもあります。あなた 195*4882a593Smuzhiyunの変更に、はっきりと関連のあるメーリングリストについて知りたければ 196*4882a593SmuzhiyunMAINTAINERS ファイルを参照してください。 197*4882a593Smuzhiyun 198*4882a593SmuzhiyunVGER.KERNEL.ORG でホスティングされているメーリングリストの一覧が下記の 199*4882a593Smuzhiyunサイトに載っています。 200*4882a593Smuzhiyun<http://vger.kernel.org/vger-lists.html> 201*4882a593Smuzhiyun 202*4882a593Smuzhiyunもし、変更がユーザランドのカーネルインタフェースに影響を与え 203*4882a593Smuzhiyunるのであれば、MAN-PAGES のメンテナ( MAINTAINERS ファイルに一覧 204*4882a593Smuzhiyunがあります)に man ページのパッチを送ってください。少なくとも 205*4882a593Smuzhiyun情報がマニュアルページの中に入ってくるように、変更が起きたという 206*4882a593Smuzhiyun通知を送ってください。 207*4882a593Smuzhiyun 208*4882a593Smuzhiyunたとえ、メンテナが #5 で反応がなかったとしても、メンテナのコードに変更を 209*4882a593Smuzhiyun加えたときには、いつもメンテナに CC するのを忘れないようにしてください。 210*4882a593Smuzhiyun 211*4882a593Smuzhiyun小さなパッチであれば、Trivial Patch Monkey(ちょっとしたパッチを集めている) 212*4882a593Smuzhiyun<trivial@kernel.org>に CC してもいいです。その現管理者については MAINTAINERS 213*4882a593Smuzhiyunファイルを見てください。ちょっとしたパッチとは以下のルールのどれか1つを満たして 214*4882a593Smuzhiyunいなければなりません。 215*4882a593Smuzhiyun ・ドキュメントのスペルミスの修正 216*4882a593Smuzhiyun ・grep(1) コマンドによる検索を困難にしているスペルの修正 217*4882a593Smuzhiyun ・コンパイル時の警告の修正(無駄な警告が散乱することは好ましくないた 218*4882a593Smuzhiyun めです) 219*4882a593Smuzhiyun ・コンパイル問題の修正(それらの修正が本当に正しい場合に限る) 220*4882a593Smuzhiyun ・実行時の問題の修正(それらの修正が本当に問題を修正している場合に限る) 221*4882a593Smuzhiyun ・廃止予定の関数やマクロを使用しているコードの除去(例 check_region ) 222*4882a593Smuzhiyun ・問い合わせ先やドキュメントの修正 223*4882a593Smuzhiyun ・移植性のないコードから移植性のあるコードへの置き換え(小さい範囲で 224*4882a593Smuzhiyun あればアーキテクチャ特有のことでも他の人がコピーできます) 225*4882a593Smuzhiyun ・作者やメンテナによる修正(すなわち patch monkey の再転送モード) 226*4882a593Smuzhiyun 227*4882a593Smuzhiyun7) MIME やリンクや圧縮ファイルや添付ファイルではなくプレインテキストのみ 228*4882a593Smuzhiyun 229*4882a593SmuzhiyunLinus や他のカーネル開発者はあなたが投稿した変更を読んで、コメントでき 230*4882a593Smuzhiyunる必要があります。カーネル開発者にとって、あなたが書いたコードの特定の 231*4882a593Smuzhiyun部分にコメントをするために、標準的な電子メールクライアントで変更が引用 232*4882a593Smuzhiyunできることは重要です。 233*4882a593Smuzhiyun 234*4882a593Smuzhiyun上記の理由で、すべてのパッチは文中に含める形式の電子メールで投稿さ 235*4882a593Smuzhiyunれるべきです。警告:あなたがパッチをコピー&ペーストする際には、パッ 236*4882a593Smuzhiyunチを改悪するエディターの折り返し機能に注意してください。 237*4882a593Smuzhiyun 238*4882a593Smuzhiyunパッチを圧縮の有無に関わらず MIME 形式で添付しないでください。多くのポ 239*4882a593Smuzhiyunピュラーな電子メールクライアントは MIME 形式の添付ファイルをプレーンテ 240*4882a593Smuzhiyunキストとして送信するとは限らないでしょう。そうなると、電子メールクラ 241*4882a593Smuzhiyunイアントがコードに対するコメントを付けることをできなくします。また、 242*4882a593SmuzhiyunMIME 形式の添付ファイルは Linus に手間を取らせることになり、その変更を 243*4882a593Smuzhiyun受け入れてもらう可能性が低くなってしまいます。 244*4882a593Smuzhiyun 245*4882a593Smuzhiyun例外:お使いの電子メールクライアントがパッチをめちゃくちゃにするので 246*4882a593Smuzhiyunあれば、誰かが MIME 形式のパッチを再送するよう求めるかもしれません。 247*4882a593Smuzhiyun 248*4882a593Smuzhiyun余計な変更を加えずにあなたのパッチを送信するための電子メールクライアントの設定 249*4882a593Smuzhiyunのヒントについては Documentation/process/email-clients.rst を参照してください。 250*4882a593Smuzhiyun 251*4882a593Smuzhiyun8) 電子メールのサイズ 252*4882a593Smuzhiyun 253*4882a593Smuzhiyunパッチを Linus へ送るときは常に #7 の手順に従ってください。 254*4882a593Smuzhiyun 255*4882a593Smuzhiyun大きなパッチはメーリングリストやメンテナにとって不親切です。パッチが 256*4882a593Smuzhiyun未圧縮で 300KB を超えるようであるなら、インターネット上のアクセス可能な 257*4882a593Smuzhiyunサーバに保存し、保存場所を示す URL を伝えるほうが適切です。 258*4882a593Smuzhiyun 259*4882a593Smuzhiyun9) カーネルバージョンの明記 260*4882a593Smuzhiyun 261*4882a593Smuzhiyunパッチが対象とするカーネルのバージョンをパッチの概要か電子メールの 262*4882a593Smuzhiyunサブジェクトに付けることが重要です。 263*4882a593Smuzhiyun 264*4882a593Smuzhiyunパッチが最新バージョンのカーネルに正しく適用できなければ、Linus は 265*4882a593Smuzhiyunそのパッチを採用しないでしょう。 266*4882a593Smuzhiyun 267*4882a593Smuzhiyun10) がっかりせず再投稿 268*4882a593Smuzhiyun 269*4882a593Smuzhiyunパッチを投稿した後は、辛抱強く待っていてください。Linus があなたのパッ 270*4882a593Smuzhiyunチを気に入って採用すれば、Linus がリリースする次のバージョンのカーネル 271*4882a593Smuzhiyunの中で姿を見せるでしょう。 272*4882a593Smuzhiyun 273*4882a593Smuzhiyunしかし、パッチが次のバージョンのカーネルに入っていないなら、いくつもの 274*4882a593Smuzhiyun理由があるのでしょう。その原因を絞り込み、間違っているものを正し、更新 275*4882a593Smuzhiyunしたパッチを投稿するのはあなたの仕事です。 276*4882a593Smuzhiyun 277*4882a593SmuzhiyunLinus があなたのパッチに対して何のコメントもなく不採用にすることは極め 278*4882a593Smuzhiyunて普通のことです。それは自然な姿です。もし、Linus があなたのパッチを受 279*4882a593Smuzhiyunけ取っていないのであれば、以下の理由が考えられます。 280*4882a593Smuzhiyun* パッチが最新バージョンの Linux カーネルにきちんと適用できなかった 281*4882a593Smuzhiyun* パッチが LKML で十分に議論されていなかった 282*4882a593Smuzhiyun* スタイルの問題(セクション2を参照) 283*4882a593Smuzhiyun* 電子メールフォーマットの問題(このセクションを参照) 284*4882a593Smuzhiyun* パッチに対する技術的な問題 285*4882a593Smuzhiyun* Linus はたくさんの電子メールを受け取っているので、どさくさに紛れて見 286*4882a593Smuzhiyun 失った 287*4882a593Smuzhiyun* 不愉快にさせている 288*4882a593Smuzhiyun 289*4882a593Smuzhiyun判断できない場合は、LKML にコメントを頼んでください。 290*4882a593Smuzhiyun 291*4882a593Smuzhiyun11) サブジェクトに「 PATCH 」 292*4882a593Smuzhiyun 293*4882a593SmuzhiyunLinus や LKML への大量の電子メールのために、サブジェクトのプレフィックスに 294*4882a593Smuzhiyun「 [PATCH] 」を付けることが慣習となっています。これによって Linus や他の 295*4882a593Smuzhiyunカーネル開発者がパッチであるのか、又は、他の議論に関する電子メールであるの 296*4882a593Smuzhiyunかをより簡単に識別できます。 297*4882a593Smuzhiyun 298*4882a593Smuzhiyun12) パッチへの署名 299*4882a593Smuzhiyun 300*4882a593Smuzhiyun誰が何をしたのかを追いかけやすくするために (特に、パッチが何人かの 301*4882a593Smuzhiyunメンテナを経て最終的に Linux カーネルに取り込まれる場合のために)、電子 302*4882a593Smuzhiyunメールでやり取りされるパッチに対して「 sign-off 」という手続きを導入し 303*4882a593Smuzhiyunました。 304*4882a593Smuzhiyun 305*4882a593Smuzhiyun「 sign-off 」とは、パッチがあなたの書いたものであるか、あるいは、 306*4882a593Smuzhiyunあなたがそのパッチをオープンソースとして提供する権利を保持している、 307*4882a593Smuzhiyunという証明をパッチの説明の末尾に一行記載するというものです。 308*4882a593Smuzhiyunルールはとても単純です。以下の項目を確認して下さい。 309*4882a593Smuzhiyun 310*4882a593Smuzhiyun 原作者の証明書( DCO ) 1.1 311*4882a593Smuzhiyun 312*4882a593Smuzhiyun このプロジェクトに寄与するものとして、以下のことを証明する。 313*4882a593Smuzhiyun 314*4882a593Smuzhiyun (a) 本寄与は私が全体又は一部作成したものであり、私がそのファイ 315*4882a593Smuzhiyun ル中に明示されたオープンソースライセンスの下で公開する権利 316*4882a593Smuzhiyun を持っている。もしくは、 317*4882a593Smuzhiyun 318*4882a593Smuzhiyun (b) 本寄与は、私が知る限り、適切なオープンソースライセンスでカバ 319*4882a593Smuzhiyun ーされている既存の作品を元にしている。同時に、私はそのライセ 320*4882a593Smuzhiyun ンスの下で、私が全体又は一部作成した修正物を、ファイル中で示 321*4882a593Smuzhiyun される同一のオープンソースライセンスで(異なるライセンスの下で 322*4882a593Smuzhiyun 投稿することが許可されている場合を除いて)投稿する権利を持って 323*4882a593Smuzhiyun いる。もしくは、 324*4882a593Smuzhiyun 325*4882a593Smuzhiyun (c) 本寄与は(a)、(b)、(c)を証明する第3者から私へ直接提供された 326*4882a593Smuzhiyun ものであり、私はそれに変更を加えていない。 327*4882a593Smuzhiyun 328*4882a593Smuzhiyun (d) 私はこのプロジェクトと本寄与が公のものであることに理解及び同意す 329*4882a593Smuzhiyun る。同時に、関与した記録(投稿の際の全ての個人情報と sign-off を 330*4882a593Smuzhiyun 含む)が無期限に保全されることと、当該プロジェクト又は関連する 331*4882a593Smuzhiyun オープンソースライセンスに沿った形で再配布されることに理解及び 332*4882a593Smuzhiyun 同意する。 333*4882a593Smuzhiyun 334*4882a593Smuzhiyunもしこれに同意できるなら、以下のような1行を追加してください。 335*4882a593Smuzhiyun 336*4882a593Smuzhiyun Signed-off-by: Random J Developer <random@developer.example.org> 337*4882a593Smuzhiyun 338*4882a593Smuzhiyun実名を使ってください。(残念ですが、偽名や匿名による寄与はできません。) 339*4882a593Smuzhiyun 340*4882a593Smuzhiyun人によっては sign-off の近くに追加のタグを付加しています。それらは今のところ 341*4882a593Smuzhiyun無視されますが、あなたはそのタグを社内の手続きに利用したり、sign-off に特別 342*4882a593Smuzhiyunな情報を示したりすることができます。 343*4882a593Smuzhiyun 344*4882a593Smuzhiyunあなたがサブシステムまたはブランチのメンテナであれば、受け取ったパッチを自身の 345*4882a593Smuzhiyunツリーにマージするために、わずかに変更が必要となる場合があります。なぜなら 346*4882a593Smuzhiyunあなたのツリーの中のコードと投稿者のツリーの中のコードは同一ではないためです。 347*4882a593Smuzhiyunもし、あなたが厳密に上記ルール(c)にこだわるのであれば、投稿者に再度差分を 348*4882a593Smuzhiyunとるよう依頼すべきです。しかし、これは時間とエネルギーを非生産的に浪費する 349*4882a593Smuzhiyunことになります。ルール(b)はあなたにコードを修正する権利を与えてくれます。 350*4882a593Smuzhiyunしかし、投稿者のコードを修正し、その修正によるバグを投稿者に押し付けてしまう 351*4882a593Smuzhiyunことはとても失礼なことです。この問題を解決するために、末尾の投稿者の 352*4882a593SmuzhiyunSigned-off-by とあなたがその末尾に追加する Signed-off-by の間に、修正を 353*4882a593Smuzhiyun加えたことを示す1行を追加することが推奨されています。 354*4882a593Smuzhiyun(その1行の書き方に)決まりはありませんが、大括弧の中に電子メールアドレスや氏名 355*4882a593Smuzhiyunと修正内容を記載するやり方は目につきやすく、最終段階での変更の責任があなたに 356*4882a593Smuzhiyunあることを明確にするのに十分な方法のようです。例えば、 357*4882a593Smuzhiyun 358*4882a593Smuzhiyun Signed-off-by: Random J Developer <random@developer.example.org> 359*4882a593Smuzhiyun [lucky@maintainer.example.org: struct foo moved from foo.c to foo.h] 360*4882a593Smuzhiyun Signed-off-by: Lucky K Maintainer <lucky@maintainer.example.org> 361*4882a593Smuzhiyun 362*4882a593Smuzhiyunあなたが安定版のブランチを管理しており、作成者のクレジット、変更の追跡、 363*4882a593Smuzhiyun修正のマージ、と同時に苦情からの投稿者の保護を行いたい場合、この慣習は特に 364*4882a593Smuzhiyun有用となります。いかなる事情があってもチェンジログに出てくる作成者の 365*4882a593Smuzhiyunアイデンティティ情報(From ヘッダ)は変更できないことに注意してください。 366*4882a593Smuzhiyun 367*4882a593Smuzhiyunバックポートする人のための特別な注意事項。追跡を容易に行うために、コミット 368*4882a593Smuzhiyunメッセージのトップ(サブジェクト行のすぐ後)にパッチの起源を示す情報を記述する 369*4882a593Smuzhiyunことは一般的で有用な慣習です。例えば、これは 2.6-stable ツリーでの一例です。 370*4882a593Smuzhiyun 371*4882a593Smuzhiyun Date: Tue May 13 19:10:30 2008 +0000 372*4882a593Smuzhiyun 373*4882a593Smuzhiyun SCSI: libiscsi regression in 2.6.25: fix nop timer handling 374*4882a593Smuzhiyun 375*4882a593Smuzhiyun commit 4cf1043593db6a337f10e006c23c69e5fc93e722 upstream 376*4882a593Smuzhiyun 377*4882a593Smuzhiyunそして、これは 2.4 ツリーでの一例です。 378*4882a593Smuzhiyun 379*4882a593Smuzhiyun Date: Tue May 13 22:12:27 2008 +0200 380*4882a593Smuzhiyun 381*4882a593Smuzhiyun wireless, airo: waitbusy() won't delay 382*4882a593Smuzhiyun 383*4882a593Smuzhiyun [backport of 2.6 commit b7acbdfbd1f277c1eb23f344f899cfa4cd0bf36a] 384*4882a593Smuzhiyun 385*4882a593Smuzhiyunどんな形式であれ、この情報はあなたのツリーを追跡する人やあなたのツリーのバグを 386*4882a593Smuzhiyun解決しようとしている人にとって価値のある支援となります。 387*4882a593Smuzhiyun 388*4882a593Smuzhiyun13) いつ Acked-by: と Cc: を使うのか 389*4882a593Smuzhiyun 390*4882a593Smuzhiyun「 Signed-off-by: 」タグはその署名者がパッチの開発に関わっていたことやパッチ 391*4882a593Smuzhiyunの伝播パスにいたことを示しています。 392*4882a593Smuzhiyun 393*4882a593Smuzhiyunある人が直接パッチの準備や作成に関わっていないけれど、その人のパッチに対す 394*4882a593Smuzhiyunる承認を記録し、示したいとします。その場合、その人を示すのに Acked-by: が使 395*4882a593Smuzhiyunえます。Acked-by: はパッチのチェンジログにも追加されます。 396*4882a593Smuzhiyun 397*4882a593Smuzhiyunパッチの影響を受けるコードのメンテナがパッチに関わっていなかったり、パッチ 398*4882a593Smuzhiyunの伝播パスにいなかった時にも、メンテナは Acked-by: をしばしば利用します。 399*4882a593Smuzhiyun 400*4882a593SmuzhiyunAcked-by: は Signed-off-by: のように公式なタグではありません。それはメンテナが 401*4882a593Smuzhiyun少なくともパッチをレビューし、同意を示しているという記録です。そのような 402*4882a593Smuzhiyunことからパッチをマージする人がメンテナの「うん、良いと思うよ」という発言を 403*4882a593SmuzhiyunAcked-by: へ置き換えることがあります。 404*4882a593Smuzhiyun 405*4882a593SmuzhiyunAcked-by: が必ずしもパッチ全体の承認を示しているわけではありません。例えば、 406*4882a593Smuzhiyunあるパッチが複数のサブシステムへ影響を与えており、その中の1つのサブシステム 407*4882a593Smuzhiyunのメンテナからの Acked-by: を持っているとします。その場合、Acked-by: は通常 408*4882a593Smuzhiyunそのメンテナのコードに影響を与える一部分だけに対する承認を示しています。 409*4882a593Smuzhiyunこの点は、ご自分で判断してください。(その Acked-by: が)疑わしい場合は、 410*4882a593Smuzhiyunメーリングリストアーカイブの中の大元の議論を参照すべきです。 411*4882a593Smuzhiyun 412*4882a593Smuzhiyunパッチにコメントする機会を持っていたが、その時にコメントしなかった人がいれば、 413*4882a593Smuzhiyunその人を指す「Cc:」タグを任意で追加してもかまいません。これは指定された人からの 414*4882a593Smuzhiyun明確なアクションなしに付与できる唯一のタグです。 415*4882a593Smuzhiyunこのタグはパッチに関心があると思われる人達がそのパッチの議論に含まれていたこと 416*4882a593Smuzhiyunを明文化します。 417*4882a593Smuzhiyun 418*4882a593Smuzhiyun14) Reported-by と Tested-by: と Reviewed-by: の利用 419*4882a593Smuzhiyun 420*4882a593Smuzhiyun他の誰かによって報告された問題を修正するパッチであれば、問題報告者という寄与を 421*4882a593Smuzhiyunクレジットするために、Reported-by: タグを追加することを検討してください。 422*4882a593Smuzhiyunこまめにバグ報告者をクレジットしていくことで、うまくいけばその人たちが将来再び 423*4882a593Smuzhiyunコミュニティの力となってくれるでしょう。 424*4882a593Smuzhiyunただし、報告者の許可無くこのタグを追加しないように注意してください。特に、 425*4882a593Smuzhiyun問題が公の場で報告されていなかったのであれば。 426*4882a593Smuzhiyun 427*4882a593SmuzhiyunTested-by: タグはタグで指定された人によって(ある環境下で)パッチのテストに成功 428*4882a593Smuzhiyunしていることを示します。このタグはメンテナにテストが実施済みであることを 429*4882a593Smuzhiyun知らせ、将来の関連パッチのテスト協力者を見つける方法を提供し、テスト実施者に 430*4882a593Smuzhiyun対するクレジットを保証します。 431*4882a593Smuzhiyun 432*4882a593SmuzhiyunReviewed-by: タグは、それとは異なり、下記のレビューア宣言の下にレビューされ、 433*4882a593Smuzhiyun受け入れ可能とみなされたパッチであることを示します。 434*4882a593Smuzhiyun 435*4882a593Smuzhiyun レビューアによる監督宣言 436*4882a593Smuzhiyun 437*4882a593Smuzhiyun 私は Reviewed-by: タグを提示することによって、以下のことを明言する。 438*4882a593Smuzhiyun 439*4882a593Smuzhiyun (a) 私はメインラインカーネルへの統合に向け、その妥当性及び「即応性 440*4882a593Smuzhiyun (訳注)」を検証し、技術的側面からパッチをレビュー済みである。 441*4882a593Smuzhiyun 442*4882a593Smuzhiyun 訳注: 443*4882a593Smuzhiyun 「即応性」の原文は "readiness"。 444*4882a593Smuzhiyun パッチが十分な品質を持っており、メインラインカーネルへの統合を即座に 445*4882a593Smuzhiyun 行うことができる状態であるかどうかを "readiness" という単語で表現 446*4882a593Smuzhiyun している。 447*4882a593Smuzhiyun 448*4882a593Smuzhiyun (b) パッチに関するあらゆる問題、懸念、あるいは、疑問は投稿者へ伝達済み 449*4882a593Smuzhiyun である。私はそれらのコメントに対する投稿者の返答に満足している。 450*4882a593Smuzhiyun 451*4882a593Smuzhiyun (c) 投稿に伴い改良されるコードがある一方で、現時点で、私は(1)それが 452*4882a593Smuzhiyun カーネルにとって価値のある変更であること、そして、(2)統合に際して 453*4882a593Smuzhiyun 議論になり得るような問題はないものと確信している。 454*4882a593Smuzhiyun 455*4882a593Smuzhiyun (d) 私はパッチをレビューし適切であると確信している一方で、あらゆる 456*4882a593Smuzhiyun 状況においてその宣言した目的や機能が正しく実現することに関して、 457*4882a593Smuzhiyun いかなる保証もしない(特にどこかで明示しない限り)。 458*4882a593Smuzhiyun 459*4882a593SmuzhiyunReviewd-by タグはそのパッチがカーネルに対して適切な修正であって、深刻な技術的 460*4882a593Smuzhiyun問題を残していないという意見の宣言です。興味のあるレビューアは誰でも(レビュー 461*4882a593Smuzhiyun作業を終えたら)パッチに対して Reviewed-by タグを提示できます。このタグは 462*4882a593Smuzhiyunレビューアの寄与をクレジットする働き、レビューの進捗の度合いをメンテナに 463*4882a593Smuzhiyun知らせる働きを持ちます。そのパッチの領域に詳しく、そして、しっかりとした 464*4882a593Smuzhiyunレビューを実施したレビューアによって提供される時、Reviewed-by: タグがあなたの 465*4882a593Smuzhiyunパッチをカーネルにマージする可能性を高めるでしょう。 466*4882a593Smuzhiyun 467*4882a593Smuzhiyun15) 標準的なパッチのフォーマット 468*4882a593Smuzhiyun 469*4882a593Smuzhiyun標準的なパッチのサブジェクトは以下のとおりです。 470*4882a593Smuzhiyun 471*4882a593Smuzhiyun Subject: [PATCH 001/123] subsystem: summary phrase 472*4882a593Smuzhiyun 473*4882a593Smuzhiyun標準的なパッチの、電子メールのボディは以下の項目を含んでいます。 474*4882a593Smuzhiyun 475*4882a593Smuzhiyun - パッチの作成者を明記する「 from 」行 476*4882a593Smuzhiyun 477*4882a593Smuzhiyun - 空行 478*4882a593Smuzhiyun 479*4882a593Smuzhiyun - 説明本体。これはこのパッチを説明するために無期限のチェンジログ 480*4882a593Smuzhiyun (変更履歴)にコピーされます。 481*4882a593Smuzhiyun 482*4882a593Smuzhiyun - 上述した「 Signed-off-by: 」行。これも説明本体と同じくチェン 483*4882a593Smuzhiyun ジログ内にコピーされます。 484*4882a593Smuzhiyun 485*4882a593Smuzhiyun - マーカー行は単純に「 --- 」です。 486*4882a593Smuzhiyun 487*4882a593Smuzhiyun - 余計なコメントは、チェンジログには不適切です。 488*4882a593Smuzhiyun 489*4882a593Smuzhiyun - 実際のパッチ(差分出力) 490*4882a593Smuzhiyun 491*4882a593Smuzhiyunサブジェクト行のフォーマットは、アルファベット順で電子メールをとても 492*4882a593Smuzhiyunソートしやすいものになっています。(ほとんどの電子メールクライアント 493*4882a593Smuzhiyunはソートをサポートしています)パッチのサブジェクトの連番は0詰めであ 494*4882a593Smuzhiyunるため、数字でのソートとアルファベットでのソートは同じ結果になります。 495*4882a593Smuzhiyun 496*4882a593Smuzhiyun電子メールのサブジェクト内のサブシステム表記は、パッチが適用される 497*4882a593Smuzhiyun分野またはサブシステムを識別できるようにすべきです。 498*4882a593Smuzhiyun 499*4882a593Smuzhiyun電子メールのサブジェクトの「summary phrase」はそのパッチの概要を正確 500*4882a593Smuzhiyunに表現しなければなりません。「summary phrase」をファイル名にしてはい 501*4882a593Smuzhiyunけません。パッチシリーズ中でそれぞれのパッチは同じ「summary phrase」を 502*4882a593Smuzhiyun使ってはいけません(「パッチシリーズ」とは順序付けられた関連のある複数の 503*4882a593Smuzhiyunパッチ群です)。 504*4882a593Smuzhiyun 505*4882a593Smuzhiyunあなたの電子メールの「summary phrase」がそのパッチにとって世界で唯一の識別子に 506*4882a593Smuzhiyunなるように心がけてください。「summary phrase」は git のチェンジログの中へ 507*4882a593Smuzhiyunずっと伝播していきます。「summary phrase」は、開発者が後でパッチを参照する 508*4882a593Smuzhiyunために議論の中で利用するかもしれません。 509*4882a593Smuzhiyun人々はそのパッチに関連した議論を読むために「summary phrase」を使って google で 510*4882a593Smuzhiyun検索したがるでしょう。それはまた2、3ヶ月あとで、人々が「gitk」や 511*4882a593Smuzhiyun「git log --oneline」のようなツールを使用して何千ものパッチに目を通す時、 512*4882a593Smuzhiyun唯一目にとまる情報となるでしょう。 513*4882a593Smuzhiyun 514*4882a593Smuzhiyunこれらの理由のため、「summary phrase」はなぜパッチが必要であるか、パッチが何を 515*4882a593Smuzhiyun変更するかの2つの情報をせいぜい70〜75文字で表現していなければなりません。 516*4882a593Smuzhiyun「summary phrase」は簡潔であり説明的である表現を目指しつつ、うまく 517*4882a593Smuzhiyunまとめられている概要となるべきです。 518*4882a593Smuzhiyun 519*4882a593Smuzhiyun「summary phrase」は「Subject: [PATCH tag] <summary phrase>」のように、 520*4882a593Smuzhiyun大括弧で閉じられたタグを接頭辞として付加してもかまいません。このタグは 521*4882a593Smuzhiyun「summary phrase」の一部とは考えませんが、パッチをどのように取り扱うべきかを 522*4882a593Smuzhiyun表現します。 523*4882a593Smuzhiyun一般的には「v1, v2, v3」のようなバージョン情報を表すタグ(過去のパッチに対する 524*4882a593Smuzhiyunコメントを反映するために複数のバージョンのパッチが投稿されているのであれば)、 525*4882a593Smuzhiyun「RFC」のようなコメントを要求するタグが挙げられます。パッチシリーズとして4つの 526*4882a593Smuzhiyunパッチがあれば、個々のパッチに「1/4, 2/4, 3/4, 4/4」のように番号を付けても 527*4882a593Smuzhiyunかまいません。これは開発者がパッチを適用する順番を確実に把握するためです。 528*4882a593Smuzhiyunそして、開発者がパッチシリーズの中のすべてのパッチをもらさずレビュー或いは 529*4882a593Smuzhiyun適用するのを保証するためです。 530*4882a593Smuzhiyun 531*4882a593Smuzhiyunサブジェクトの例を二つ 532*4882a593Smuzhiyun 533*4882a593Smuzhiyun Subject: [patch 2/5] ext2: improve scalability of bitmap searching 534*4882a593Smuzhiyun Subject: [PATCHv2 001/207] x86: fix eflags tracking 535*4882a593Smuzhiyun 536*4882a593Smuzhiyun「 from 」行は電子メールのボディの一番最初の行でなければなりません。 537*4882a593Smuzhiyunその形式は以下のとおりです。 538*4882a593Smuzhiyun 539*4882a593Smuzhiyun From: Original Author <author@example.com> 540*4882a593Smuzhiyun 541*4882a593Smuzhiyun「 from 」行はチェンジログの中で、そのパッチの作成者としてクレジットされ 542*4882a593Smuzhiyunている人を特定するものです。「 from 」行がかけていると、電子メールのヘッ 543*4882a593Smuzhiyunダーの「 From: 」が、チェンジログの中でパッチの作成者を決定するために使わ 544*4882a593Smuzhiyunれるでしょう。 545*4882a593Smuzhiyun 546*4882a593Smuzhiyun説明本体は無期限のソースのチェンジログにコミットされます。なので、説明 547*4882a593Smuzhiyun本体はそのパッチに至った議論の詳細を忘れているある程度の技量を持っている人 548*4882a593Smuzhiyunがその詳細を思い出すことができるものでなければなりません。パッチが対処する 549*4882a593Smuzhiyun障害の症状(カーネルログメッセージや oops メッセージ等)を記載することは問題に 550*4882a593Smuzhiyun対処可能なパッチを求めてコミットログを検索する人々にとって特に有用です。 551*4882a593Smuzhiyunパッチがコンパイル問題を解決するのであれば、そのパッチを探している人が見つける 552*4882a593Smuzhiyunことができる情報だけで十分であり、コンパイル時の全てのエラーを含める必要は 553*4882a593Smuzhiyunありません。「summary phrase」と同様に、簡潔であり説明的であることが重要です。 554*4882a593Smuzhiyun 555*4882a593Smuzhiyun「 --- 」マーカー行はパッチ処理ツールに対して、チェンジログメッセージの終端 556*4882a593Smuzhiyun部分を認識させるという重要な役目を果たします。 557*4882a593Smuzhiyun 558*4882a593Smuzhiyun「 --- 」マーカー行の後の追加コメントの良い使用方法の1つに diffstat コマンド 559*4882a593Smuzhiyunがあります。diffstat コマンドとは何のファイルが変更され、1ファイル当たり何行 560*4882a593Smuzhiyun追加され何行消されたかを示すものです。diffstat コマンドは特に大きなパッチに 561*4882a593Smuzhiyunおいて役立ちます。その時点でだけ又はメンテナにとってのみ関係のあるコメント 562*4882a593Smuzhiyunは無期限に保存されるチェンジログにとって適切ではありません。そのため、この 563*4882a593Smuzhiyunようなコメントもマーカー行の後に書かれるべきです。 564*4882a593Smuzhiyunこのようなコメントの良い例として、v1 と v2 のバージョン間で何が変更されたかを 565*4882a593Smuzhiyun表す「パッチの変更履歴」が挙げられます。 566*4882a593Smuzhiyun 567*4882a593Smuzhiyun「 --- 」マーカー行の後に diffstat コマンドの結果を含めるのであれば、ファイル 568*4882a593Smuzhiyun名はカーネルソースツリーのトップディレクトリからの表記で列記されるため、横方向 569*4882a593Smuzhiyunのスペースをとり過ぎないように、diffstat コマンドにオプション「 -p 1 -w 70 」 570*4882a593Smuzhiyunを指定してください(インデントを含めてちょうど80列に合うでしょう)。 571*4882a593Smuzhiyun 572*4882a593Smuzhiyun適切なパッチのフォーマットの詳細についてはセクション3の参考文献を参照して 573*4882a593Smuzhiyunください。 574*4882a593Smuzhiyun 575*4882a593Smuzhiyun16) 「git pull」要求の送り方(Linus の電子メールから) 576*4882a593Smuzhiyun 577*4882a593Smuzhiyun間違ったブランチから引っ張るのを防ぐために、git リポジトリのアドレスと 578*4882a593Smuzhiyunブランチ名を同じ行に1行で記載してください。そうすることで、3回の連続クリック 579*4882a593Smuzhiyunで全て選択できます。 580*4882a593Smuzhiyun 581*4882a593Smuzhiyun正しい形式は下記の通りです。 582*4882a593Smuzhiyun 583*4882a593Smuzhiyun "Please pull from 584*4882a593Smuzhiyun 585*4882a593Smuzhiyun git://jdelvare.pck.nerim.net/jdelvare-2.6 i2c-for-linus 586*4882a593Smuzhiyun 587*4882a593Smuzhiyun to get these changes:" 588*4882a593Smuzhiyun 589*4882a593Smuzhiyunその結果、アドレスを自分自身でタイピングして間違えることはなくなります(実際に、 590*4882a593Smuzhiyun何度か間違ったブランチから引っ張ってきてしまい、その時に diffstat の結果を 591*4882a593Smuzhiyun検証して間違っていることに気づいたことがあります。どこから何を引っ張るべきかを 592*4882a593Smuzhiyun「探したり」、正しいブランチ名かどうかを重ねてチェックしたりする必要が 593*4882a593Smuzhiyunなくなればより快適になるでしょう)。 594*4882a593Smuzhiyun 595*4882a593Smuzhiyundiffstat の結果を生成するために「 git diff -M --stat --summary 」を使って 596*4882a593Smuzhiyunください。-M オプションはファイル名の変更を検知でき、--summary オプションは 597*4882a593Smuzhiyun新規ファイル、削除されたファイル、名前が変更されたファイルの概要を生成します。 598*4882a593Smuzhiyun 599*4882a593Smuzhiyun-M オプション(ファイル名の変更検知)を指定すると、diffstat の結果はかなり 600*4882a593Smuzhiyun異なってきます。git は大規模な変更(追加と削除のペア)をファイル名の変更と 601*4882a593Smuzhiyun判断するためです。 602*4882a593Smuzhiyun 603*4882a593Smuzhiyun------------------------------------ 604*4882a593Smuzhiyunセクション2 - ヒントとTIPSと小技 605*4882a593Smuzhiyun------------------------------------ 606*4882a593Smuzhiyun 607*4882a593Smuzhiyunこのセクションは Linux カーネルに変更を適用することに関係のある一般的な 608*4882a593Smuzhiyun「お約束」の多くを載せています。物事には例外というものがあります。しか 609*4882a593Smuzhiyunし例外を適用するには、本当に妥当な理由が不可欠です。あなたは恐らくこの 610*4882a593Smuzhiyunセクションを Linus のコンピュータ・サイエンス101と呼ぶでしょう。 611*4882a593Smuzhiyun 612*4882a593Smuzhiyun1) Documentation/process/coding-style.rstを参照 613*4882a593Smuzhiyun 614*4882a593Smuzhiyun言うまでもなく、あなたのコードがこのコーディングスタイルからあまりに 615*4882a593Smuzhiyunも逸脱していると、レビューやコメントなしに受け取ってもらえないかもし 616*4882a593Smuzhiyunれません。 617*4882a593Smuzhiyun 618*4882a593Smuzhiyun特筆すべき例外は、コードをあるファイルから別のファイルに移動 619*4882a593Smuzhiyunするときです。この場合、コードを移動するパッチでは、移動されるコード 620*4882a593Smuzhiyunに関して移動以外の変更を一切加えるべきではありません。これにより、 621*4882a593Smuzhiyunコードの移動とあなたが行ったコードの修正を明確に区別できるようにな 622*4882a593Smuzhiyunります。これは実際に何が変更されたかをレビューする際の大きな助けに 623*4882a593Smuzhiyunなるとともに、ツールにコードの履歴を追跡させることも容易になります。 624*4882a593Smuzhiyun 625*4882a593Smuzhiyun投稿するより前にパッチのスタイルチェッカー( scripts/checkpatch.pl )で 626*4882a593Smuzhiyunあなたのパッチをチェックしてください。このスタイルチェッカーは最終結 627*4882a593Smuzhiyun論としてではなく、指標としてみるべきです。もし、あなたのコードが違反 628*4882a593Smuzhiyunはしているが修正するより良く見えるのであれば、おそらくそのままにする 629*4882a593Smuzhiyunのがベストです。 630*4882a593Smuzhiyun 631*4882a593Smuzhiyunスタイルチェッカーによる3段階のレポート: 632*4882a593Smuzhiyun - エラー: 間違っている可能性が高い 633*4882a593Smuzhiyun - 警告:注意してレビューする必要がある 634*4882a593Smuzhiyun - チェック:考慮する必要がある 635*4882a593Smuzhiyun 636*4882a593Smuzhiyunあなたはパッチに残っている全ての違反について、それがなぜ必要なのか正当な 637*4882a593Smuzhiyun理由を示せるようにしておく必要があります。 638*4882a593Smuzhiyun 639*4882a593Smuzhiyun2) #ifdefは見苦しい 640*4882a593Smuzhiyun 641*4882a593Smuzhiyunifdef が散乱したコードは、読むのもメンテナンスするのも面倒です。コードの中 642*4882a593Smuzhiyunで ifdef を使わないでください。代わりに、ヘッダファイルの中に ifdef を入れて、 643*4882a593Smuzhiyun条件付きで、コードの中で使われる関数を「 static inline 」関数かマクロで定義し 644*4882a593Smuzhiyunてください。後はコンパイラが、何もしない箇所を最適化して取り去ってくれるで 645*4882a593Smuzhiyunしょう。 646*4882a593Smuzhiyun 647*4882a593Smuzhiyunまずいコードの簡単な例 648*4882a593Smuzhiyun 649*4882a593Smuzhiyun dev = alloc_etherdev (sizeof(struct funky_private)); 650*4882a593Smuzhiyun if (!dev) 651*4882a593Smuzhiyun return -ENODEV; 652*4882a593Smuzhiyun #ifdef CONFIG_NET_FUNKINESS 653*4882a593Smuzhiyun init_funky_net(dev); 654*4882a593Smuzhiyun #endif 655*4882a593Smuzhiyun 656*4882a593Smuzhiyunクリーンアップしたコードの例 657*4882a593Smuzhiyun 658*4882a593Smuzhiyun(in header) 659*4882a593Smuzhiyun #ifndef CONFIG_NET_FUNKINESS 660*4882a593Smuzhiyun static inline void init_funky_net (struct net_device *d) {} 661*4882a593Smuzhiyun #endif 662*4882a593Smuzhiyun 663*4882a593Smuzhiyun(in the code itself) 664*4882a593Smuzhiyun dev = alloc_etherdev (sizeof(struct funky_private)); 665*4882a593Smuzhiyun if (!dev) 666*4882a593Smuzhiyun return -ENODEV; 667*4882a593Smuzhiyun init_funky_net(dev); 668*4882a593Smuzhiyun 669*4882a593Smuzhiyun3) マクロより「 static inline 」を推奨 670*4882a593Smuzhiyun 671*4882a593Smuzhiyun「 static inline 」関数はマクロよりもずっと推奨されています。それらは、 672*4882a593Smuzhiyun型安全性があり、長さにも制限が無く、フォーマットの制限もありません。 673*4882a593Smuzhiyungcc においては、マクロと同じくらい軽いです。 674*4882a593Smuzhiyun 675*4882a593Smuzhiyunマクロは「 static inline 」が明らかに不適切であると分かる場所(高速化パスの 676*4882a593Smuzhiyunいくつかの特定のケース)や「 static inline 」関数を使うことができないような 677*4882a593Smuzhiyun場所(マクロの引数の文字列連結のような)にだけ使われるべきです。 678*4882a593Smuzhiyun 679*4882a593Smuzhiyun「 static inline 」は「 static __inline__ 」や「 extern inline 」や 680*4882a593Smuzhiyun「 extern __inline__ 」よりも適切です。 681*4882a593Smuzhiyun 682*4882a593Smuzhiyun4) 設計に凝りすぎるな 683*4882a593Smuzhiyun 684*4882a593Smuzhiyunそれが有用になるかどうか分からないような不明瞭な将来を見越した設計 685*4882a593Smuzhiyunをしないでください。「できる限り簡単に、そして、それ以上簡単になら 686*4882a593Smuzhiyunないような設計をしてください。」 687*4882a593Smuzhiyun 688*4882a593Smuzhiyun---------------------- 689*4882a593Smuzhiyunセクション3 参考文献 690*4882a593Smuzhiyun---------------------- 691*4882a593Smuzhiyun 692*4882a593SmuzhiyunAndrew Morton, "The perfect patch" (tpp). 693*4882a593Smuzhiyun <http://www.ozlabs.org/~akpm/stuff/tpp.txt> 694*4882a593Smuzhiyun 695*4882a593SmuzhiyunJeff Garzik, "Linux kernel patch submission format". 696*4882a593Smuzhiyun <https://web.archive.org/web/20180829112450/http://linux.yyz.us/patch-format.html> 697*4882a593Smuzhiyun 698*4882a593SmuzhiyunGreg Kroah-Hartman, "How to piss off a kernel subsystem maintainer". 699*4882a593Smuzhiyun <http://www.kroah.com/log/2005/03/31/> 700*4882a593Smuzhiyun <http://www.kroah.com/log/2005/07/08/> 701*4882a593Smuzhiyun <http://www.kroah.com/log/2005/10/19/> 702*4882a593Smuzhiyun <http://www.kroah.com/log/2006/01/11/> 703*4882a593Smuzhiyun 704*4882a593SmuzhiyunNO!!!! No more huge patch bombs to linux-kernel@vger.kernel.org people! 705*4882a593Smuzhiyun <https://lkml.org/lkml/2005/7/11/336> 706*4882a593Smuzhiyun 707*4882a593SmuzhiyunKernel Documentation/process/coding-style.rst: 708*4882a593Smuzhiyun <http://users.sosdg.org/~qiyong/lxr/source/Documentation/process/coding-style.rst> 709*4882a593Smuzhiyun 710*4882a593SmuzhiyunLinus Torvalds's mail on the canonical patch format: 711*4882a593Smuzhiyun <http://lkml.org/lkml/2005/4/7/183> 712*4882a593Smuzhiyun 713*4882a593SmuzhiyunAndi Kleen, "On submitting kernel patches" 714*4882a593Smuzhiyun Some strategies to get difficult or controversial changes in. 715*4882a593Smuzhiyun http://halobates.de/on-submitting-patches.pdf 716*4882a593Smuzhiyun 717*4882a593Smuzhiyun-- 718*4882a593Smuzhiyun 719*4882a593Smuzhiyun 720