Introduction
Git 開発コミュニティは、広く分散し、多様で、絶え間なく変化する個人のグループです。 Git メーリング・リストを介した非同期通信は、パッチのレビューや議論の際に特有の問題を引き起こします。 このドキュメントには、レビューを自分自身と他の貢献者の両方にとってより効率的にするために使用できる、いくつかの指針となる原則と便利なツールが含まれています。
注意: ここでの推奨事項はいずれも、Git コミュニティへの参加を拘束するものではなく、何らかの形での必要条件でもないことに注意してください。 これらは、貢献者としてのスキルを補うための情報として提供されています。
Principles
Selecting patch(es) to review
あなたがレビューが必要なパッチ・シリーズを探している場合は、最新の「What’s cooks in git.git」電子メール(example)のチェックから始めます。 「What’s cooking」(調理中)の電子メールとその返信は、 https://lore.kernel.org/git/
[`lore.kernel.org mailing list archive]` のクエリ s:
"What's cook
" を使用して見つけることができます。 または、あなたは、 Git の todo
ブランチの whats-cooking.txt
で追跡される「What’s cooking」メールの内容を探すことができます。 「Needs review」とタグ付けされたトピックと「[New Topics]」セクションにあるトピックは、通常、追加のレビューが最も役立つトピックです。
パッチは、s:
"PATCH" -s:
"Re:" のようなクエリを使用して、メーリング・リスト・アーカイブで手動で検索することもできます。 これらの結果を参照して、あなたの専門技術関連やあなたが関心あるトピックを見つけることができます。
あなたが既に Git に貢献している場合は、別の貢献者のパッチ・シリーズで CC されることもあります。 これらは、作者があなたの注意が必要であると感じているトピックです。 これは、彼らのパッチがあなたが以前に書いたものを変更したため (新しいアプローチが機能するかどうかを適切に判断できるようにするため)、または、あなたが非常に役立つレビューを提供する専門知識を持っているためです。 これらのパッチを確認する必要はありませんが、オープン・ソース・コラボレーションの精神から、そうすることを強く検討する必要があります。
Reviewing patches
すべての貢献者はパッチのレビューに独自のアプローチをとっていますが、ここでは、レビューをできるだけ明確で役立つものにするための一般的なアドバイスをいくつか紹介します。 アドバイスは 2 つの大まかなカテゴリに分けられます。高レベルのレビュー・ガイダンスと、メーリング・リストのパッチを操作するための具体的なヒントです。
High-level guidance
-
パッチの diff のコード変更に加えて、コミット・メッセージの内容が正確で明確であることを忘れずに確認してください。 パッチのコミット・メッセージは、 diff によるコード変更を正確かつ完全に説明する必要があります。
-
テスト・カバレッジのレビューは、重要ですが見落としがちなレビューのコンポーネントです。 パッチの変更は既存のテストでカバーされる場合もあれば、新しい動作を実行するために新しいテストが導入される場合もあります。 パッチまたはシリーズをローカルでチェックアウトすると、新規および既存のテストの行を手動で変更して、予想される 成功/失敗 の動作を検証できます。 この情報を使用して、適切なカバレッジを検証したり、作者が追加できる追加のテストを提案したりできます。
-
推奨事項を提供するときは、それを「ブロッキング」(blocking)(問題が修正されない場合、コードが破損するか、または悪化する) と見なすか、「非ブロッキング」(non-blocking)(パッチは推奨事項に従うことで改善される可能性がありますが、シリーズの受け入れにはそれが必須ではありません)と見なすかをできるだけ明確にしてください。 非ブロッキングの推奨事項は、それらがシリーズに関連しているがシリーズの範囲外である場合(「あると便利」なパターン)、または著者とレビュアーの間の文体の違いのみを表す場合、特にあいまいになる可能性があります。
-
問題についてコメントするときは、作者がそれを修正する方法について提案を含めるようにしてください。 これは、作者が問題を理解して修正するのに役立つだけでなく、あなたのトピックに対する理解を深め、改善することにもなります。
-
レビューは問題点のみを指摘しなければならない訳ではありません。 肯定的なレビューは、 パッチが対処する問題に関心を持っているのはパッチの元の作成者だけではないことを示しており、 そして、 そうすることは強く推奨されています。
-
職場の同僚のシリーズについて肯定的なレビューを与えることを躊躇しないでください。 肯定的なレビューがうまく書かれていれば、 他のコミュニティ・メンバーにとっては興味のないシリーズを企業の利益を代表して押しつけているようには見えません。
-
目標やアプローチやパッチの実装を支持する理由を他の人が理解できるような方法で肯定的なレビューを書いてください。 シリーズを徹底的に読み、 パッチが適切に作成されていると言えるほど問題領域を十分に理解していることを必ず証明してください。 レビューでは自由に「声に出して考えて」(think out loud)ください。 パッチの複雑なセクションをどのように読んで理解したかを説明したり、 混乱した点について質問したり、 非常によく書かれていると感じた点を指摘したりしてください。
-
特に、 気分を高揚させるフィードバックは、 貢献者が Git コミュニティにもっと積極的に参加するよう奨励するのに大いに役立ちます。
Performing your review
-
関連するパッチへの平文の
Reply-All
電子メールで、パッチごとにレビュー・コメントを提供します。 コメントは、関連するセクションのすぐ下にインラインで作成する必要があります。 -
パッチdiffで提供される限定されたコンテキストでは、完全なレビューを行うには不十分な場合があります。 このような場合、git-am(1) でパッチを適用するか、シリーズが追跡されたら
https://github.com/gitster/git
から関連するブランチをチェックアウトすることで、ローカル・ツリーでパッチを確認できます。 -
既存のコードをリファクタリングする場合など、 大規模で複雑なパッチdiffが避けられない場合があります。 このようなパッチを解析(parse)するのが難しい場合は、
--color-moved
および/または--ignore-space-change
オプションで生成されたdiffを確認してみてください。 -
パッチが長い場合は、レビューに関係のない部分を電子メールの返信から削除することをお勧めします。 但し、読者があなたのコメントを理解できるように、十分な文脈を残してください!
-
シリーズの完全なレビューを一度に完了することができない場合は、シリーズの残りをレビューする予定があるかどうか、またはその時期を作者に知らせることを検討してください。
Completing a review
シリーズの各パッチがレビューされると、作者(および/または 他の貢献者)はレビューについて話し合うことができます。 この結果、変更が適用されないか、または、作者がパッチの新しいバージョンを送信する可能性があります。
あなたや他の人のレビューに応じてシリーズが再度流された(reroll)時は、必ず更新を再レビューしてください。パッチシリーズの状態に満足している場合は、明示的に承認を示してください(通常、最新バージョンのカバー・レターへ返信します)。 必要に応じて、作者がシリーズ後の周回(iteration)で、レビューされたパッチを逐語的に再送信する場合、「Reviewed-by: <you>」のトレーラーを追加できることを作者に知らせることができます。
最後に、後続の「What’s cook」メールで、レビュー済みのトピックを「next」ブランチにマージする準備ができているかどうかを明示的に尋ねる場合があります(通常、「Will merge to 'next'?」('next\' にマージしますか?)というフレーズです)。 関連するスレッドへのリンクを含めて、あなた(および該当する場合は他のユーザー)のレビューの状態の簡単な説明を返信することで、メンテナーと作者を助けることができます。
Terminology
- nit:
-
タイプミスや
if
() ステートメントの条件の誤整列(misalignment)など、修正が必要な小さな問題を示します。 - aside:
- optional:
- non-blocking:
-
コメントが、パッチまたはシリーズの受け入れをブロックしないことを読者に示します。 これらは通常、コードの構成とスタイルに関連する推奨事項、または問題のパッチに関連するトピックについての熟考ですが、それらの範囲から逸脱しています。
- s/<before>/<after>/
-
「あなたは <before> と書きましたが、わたしは <after> を意味してると考えます」の省略形で、通常はスペルミスやその他の誤植の場合に使用されます。 構文は、
ed
,sed
,vim
,perl
などの Unix ツールで一般的に見られる "substitute" コマンドからの引用です。 - cover letter
-
複数パッチシリーズの「Patch 0」。 このメールでは、Git メーリング・リストの読者に向けて、パッチ・シリーズの概要と構造について説明します。 また、作者が後続バージョンの変更ログのメモと範囲差分(range-diff)を提供する場所でもあります。
シングル・パッチの送信時は、通常、カバー・レターの内容は別の電子メールとして送信されません。 代わりに、パッチのコミット・メッセージの末尾(
---
の後)とdiffの先頭の間に挿入されます。 - #leftoverbits
-
作者またはレビュアーが、 特定のパッチまたはシリーズの範囲外であるが、議論のためにトピックに関連する機能または提案された変更を説明するために使用します。