Gitにパッチを送るメモ
コードを書く
起点をどこにするか
- バグ修正の場合
- maint(無い場合はmaster)
- 新機能の場合
- master(puに依存する場合はpu)
コミットを作る
Documentation/SubmittingPatches を読む。
- パッチは論理的な単位に分ける。
- git diff --check で無駄な空白が無いかチェック。
- コメントアウトしたコードや不要なファイルが無いかチェック。
- コミットメッセージ
- 最初の一行は、50文字程度の短い要約にする。最後にピリオドは付けない。
- 二行目は、空白行にする。
- 三行目以降に、コミットメッセージの本文を書く。
- 命令形、現在時制で書く。
- コミット以前と以後で何が変わるのかを、明確に。
- コードを書いた理由、何がしたかったのか、目的を明確に。
- 最後の行に、サインオフ(原作者の証明書に同意する署名)を書く。実名のみ。
Signed-off-by: Your Name <you@example.com>
- コミット後
- バグを修正した場合、それが本当に直っているか、チェック
- テストツールがパスするか、チェック
テストツール
t/READMEを読む。
- makeすると全テストを実行(けっこう時間かかる)
- 最新版のproveなら並列実行できるらしい
prove --timer --jobs 15 ./t[0-9]*.sh
- 個別にテストするには、シェルで実行する
sh ./t3010-ls-files-killed-modified.sh
全て(?)のテストスクリプトでは test-lib.sh がsourceされている。これにより"t/trash directory.テスト名"というようなディレクトリが作られて、そこに cd して git init されるので、各テストスクリプトはその砂場でテストを実行する。この砂場はテスト成功時には削除されるが、スクリプトにデバッグオプション(--debug、-d)を付けると消されずに残る。
パッチを送る
電子メールの形式でパッチを作る
現在のブランチにあるコミットのうち、origin/masterに存在しないものを指定ディレクトリに出力
mkdir outgoing git format-patch -M origin/master -o outgoing
outgoingディレクトリにそれぞれのコミットがパッチとして出力されるので、確認し、必要があれば編集する。
出力されたファイルは電子メールの形式で、Subjectはコミットメッセージの一行目、bodyは以降のコミットメッセージになっている。
コミットメッセージの最後の行(Signed-off-byのはず)の後には、三本ダッシュだけの行があり、以降にdiffstat、続いてパッチ本体がある。
コミットメッセージには含めないけどメールには書きたい内容は、この三本ダッシュ以降パッチ本体以前に書く。diffstatの手前など。
メーリングリストにパッチを送る
git-send-emailを使う。
gmailのSMTPから送る方法でやってみる
~/.gitconfig か .git/configに以下を追加
[sendemail] from = Your Name <you@example.com> smtpencryption = tls smtpserver = smtp.gmail.com smtpuser = you@gmail.com smtpserverport = 587
まずは自分に送ってテスト
git send-email outgoing/0001-hoge.patch
送り先、In-Reply-To(誰かに返信する場合は入れたほうが良い)、SMTPのパスワード等を聞かれるので入力する。
自分宛に届いたら、そのメールをmbox形式でファイルに保存して、実際にパッチを当ててみる。
git checkout origin/master git am hoge.mbox
この結果は、git format-patchしたブランチの内容と同じになるはず
git diff HEAD..master
大丈夫そうなら、メーリングリストとメンテナ(あるいは自分の変更点を知るべき人が分かるならその人)宛に送る。
気をつけること
パッチを添付しない
パッチについてメーリングリストでディスカッションする際に、引用できなくなるので。
英語を頑張る orz
「以前はこう、そしてパッチ後はこう。〜がしたくて、やった」という説明を明確に書かないと、レビュアを混乱させる結果になる。
英語苦手でも、そこはちゃんと書くことorz
入門Git
今回、やはり入門Gitがとても参考になった。
- 作者: 濱野純(Junio C Hamano)
- 出版社/メーカー: 秀和システム
- 発売日: 2009/09/24
- メディア: 単行本
- 購入: 31人 クリック: 736回
- この商品を含むブログ (155件) を見る
そうした互いの知識と経験を活かして、プロジェクト全体をより良くするための共同作業をしているのだ、という気持ちから始めれば、「譲れるところ」と「譲れないところ」という対立が出てくる余地はありません。あるのは、「こうするとプロジェクト全体に良い」か、「これだけではダメで別のやり方をしないとプロジェクト全体には役に立たない」かの違いだけです。
ー濱野 純 『入門Git』 秀和システム、 p.179