2011-02-16
Gitにパッチを送るメモ
コードを書く
起点をどこにするか
- バグ修正の場合
- maint(無い場合はmaster)
- 新機能の場合
- master(puに依存する場合はpu)
コミットを作る
Documentation/SubmittingPatches を読む。
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を使う。
~/.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/19
- メディア: 単行本
- 購入: 26人 クリック: 626回
- この商品を含むブログ (136件) を見る
版管理とは何か、ということ(新しいコミットを作るというのはどういう意味を持つ行為なのか、など)から、オープンソースのプロジェクトにおける役割分担、分散型システムでのコミットアクセス(コミット権限)がCVSやSubversionとどう違うのかなど、ワークフローの部分、そして特にすごいのが「Chapter 10.9 オープンな開発プロセス」で語られる、メーリングリスト上での議論の進め方。大半がネイティブスピーカーではない中で、どう議論を組み立てていくべきか、どうやったら無用な意地の張り合いを避けてプロジェクトを発展させられるのか、パッチレビューで反対意見を書く際に誤解されないための文章の組み立て方まで、ものすごいノウハウと、思想が詰まっている。
そうした互いの知識と経験を活かして、プロジェクト全体をより良くするための共同作業をしているのだ、という気持ちから始めれば、「譲れるところ」と「譲れないところ」という対立が出てくる余地はありません。あるのは、「こうするとプロジェクト全体に良い」か、「これだけではダメで別のやり方をしないとプロジェクト全体には役に立たない」かの違いだけです。
ー濱野 純 『入門Git』 秀和システム、 p.179
- 86 http://www.google.co.jp/search?sourceid=chrome&ie=UTF-8&q=git+reset+HEAD
- 73 http://www.google.co.jp/search?q=git+rebase&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ja:official&hl=ja&client=firefox-a
- 47 http://www.google.co.jp/search?aq=f&sourceid=chrome&ie=UTF-8&q=git+upstream&qscrl=1
- 41 http://twitter.com/
- 16 http://www.google.co.jp/search?hl=ja&client=firefox-a&rls=org.mozilla:ja:official&q=git+svn+rebase+Unable+to+determine+upstream+SVN+information+from+working+tree+history+は&aq=f&aqi=&aql=&oq=
- 14 http://www.google.co.jp/url?sa=t&source=web&cd=2&ved=0CCYQFjAB&url=http://d.hatena.ne.jp/unpush/20100514/1273817056&rct=j&q=git rebase&ei=Sy20TY1AkMK9A7fv4YUH&usg=AFQjCNGNULtFBVzX4tIfwEqMEjTB2JIdVQ
- 14 http://www.unpush.net/
- 13 http://www.google.co.jp/search?client=safari&rls=en&q=git+rebase&ie=UTF-8&oe=UTF-8&redir_esc=&ei=VBddTYSPNJHIuAPXmt2DDQ
- 13 http://www.google.co.jp/search?sourceid=navclient&hl=ja&ie=UTF-8&rlz=1T4GFRE_jaJP372JP372&q=git+reset+master
- 13 http://www.google.com/search?client=ubuntu&channel=fs&q=git+rebase&ie=utf-8&oe=utf-8



