2015年3月23日月曜日

Github で初めての pull - request (プルリクエスト)

概要

Github にあるプルリクエストという機能は非常に強力で便利な機能です
簡単に言ってしまえば「あなたのコード修正してあげたから、そっちに適用してね」とお願いする行為になります
ただ、やり方がちょっと複雑だったり英語で文章を作ったりと大変です
今回はそんなプルリクエストをGithubでやってみたいと思います

環境

  • git 2.3.0
  • Github 2015/03/20時点

他のアカウントのリポジトリにプルリクエストを送ってみる

それでは実際にやってみます

forkする

これがプルリクエストへの第一歩です
forkとはリポジトリをコピーすることです
forkは必ず「自分でない誰かのリポジトリ」をforkしなければなりません
今回はテスト用のプルリクエストを実施するので、もしあるなら適当なリポジトリをforkしてください
ない場合は私のリポジトリのどれでもOKです

やり方は簡単で作成したリポジトリの右上にある「fork」ボタンをクリックしてください
fork.png
するとforkがはじまります
自分のアカウントにコピーしているので多少時間がかかります
forkが完了したリポジトリを見ると誰からforkしたリポジトリなのかとアイコンが「Y」みたいなforkを示すアイコンに変わります
forked_repo.png
これでforkが完了しました

ブランチを作成する

自分が修正するためのブランチを作成しましょう
ブランチは作成しなくてもいいですが、作成したほうがいいです
理由としてはブランチ名を見るだけでどういうことをしたいのかというのを表すことができるからです

まずはforkしたブランチをcloneしてきます

git clone https://github.com/kakakikikeke-fork/cookbooks-emacs.git

cloneが作成したらブランチを作成してみましょう

git branch fix_let_to_progn

ブランチを移動しましょう

git checkout fix_let_to_progn

ブランチの作成と移動はこれでOKです
この作成したブランチに修正を入れていきます

修正する

作成したブランチ上のファイルに対して、何でもいいのでファイルを修正してみます
今回は明らかにバグを見つけているのでそのバグを直してみたいと思います
バグの箇所はcookbooks-emacsfiles/default/dot_emacsの最後の方です

diffの内容は以下の通り

  • git diff
diff --git a/files/default/dot_emacs b/files/default/dot_emacs
index 05d0389..9dbddc6 100755
--- a/files/default/dot_emacs
+++ b/files/default/dot_emacs
@@ -61,7 +61,7 @@
 ; for clipborad
 (setq sysname system-type)
 (if (eq sysname 'darwin)
-    (let
+    (progn
       (defun copy-from-osx ()
        (shell-command-to-string "pbpaste"))
       (defun paste-to-osx (text &optional push)

diff を確認できたらgit add -> git commitをしていきます

修正をブランチにコミットする

ここでコミットするのはまだ自分のforkしたリポジトリのブランチなので、fork元にアカウントのリポジトリには何も変更を加えないので安心して実行してください

git add files/default/dot_emacs
git commit -m "fix let to progn"

コミットメッセージは簡潔に、かつわかりやすくしましょう
また、commit する前に.git/confignameの部分がちゃんとGithubのアカウントになっているか確認しましょう
適当な状態で commit するとコミットした名前とメールアドレスが作業マシンごとに自動生成されてしまいGithub上でアイコン等がちゃんと表示されないで注意してください

ではpushしてみます

git push -u origin fix_let_to_progn

origin は自分を表しています
fix_let_to_prognはpushしたいブランチ名を指定します
アカウント名とパスワードが聞かれるので入力してください
認証が成功すれば無事pushされるはずです

認証に失敗する場合は.git/configの設定を確認してください
[remote "origin"]urlの設定が自分のリポジトリを指しているか確認してみましょう
これが、fork元のアカウントのリポジトリになっていると認証で失敗してしまいます(勝手にfork元のリポジトリにはpushできないので)

Github上でコミット内容を確認する

forkした自分のリポジトリを確認してみます
すると以下のような感じの表示が追加されています
can_pull_req.png
プルリクエストはここから作成することができます

またbranchs等のタブを確認するとローカルにあったブランチがちゃんとGithub上にも登録されていることがわかると思います

では、本題のプルリクエストを作成してみましょう

プルリクエストの文章を作成する

先ほどの緑色のボタンをクリックするとプルリクエストを作成する画面に遷移します
プルリクエストを送信するのに必要な最低限の内容は以下の3つです

  • どの自分のブランチをどの相手のブランチにマージしてほしいか選択する
  • タイトルを入力する
  • 内容を記載する

create_pull_req.png

タイトルの部分はコミットログの内容が自動的に入力されます

正直ここのタイトルと内容の部分がマージされるための肝と言ってもいいかもしれません
タイトルは変えてもOKです
内容の部分は今回のように少しの修正であれば、そこまで細かく必要はないです
機能の追加や設定項目等があれば、まずはざっくりと何ができるのかを「Abstract」という見出しで記載して、詳細は「Detail」や「Configuration」「How to use」といった見出しを作成して具体的な設定方法や使い方を記載するといいと思います
Markdownも使うことができます
Markdownを使ったらプレビューで確認してからプルリクエストを送るようにしましょう

この辺の書き方は本当に人それぞれです
適当に書いてもマージしてくれる方もいれば、そうでない方もいるといった感じです

無理に英語で書く必要もないですが、できれば英語がいいです
fork元のリポジトリの言語に合わせるでもいいと思います

必要な内容を記載できたら「Create pull request」でプルリクエストを作成しましょう

このあとは

プルリクエストの作業自体はこれで完了です
あとはマージされるのを待ちましょう
これもユーザによってまちまちですが、すぐにマージしてくれる人もいれば、全く応答がなく放置されてしまう場合もあります
どうしてもプルリクエストをマージしてほしい場合は他のアカウントが「+1」などしてくれる場合もあります

また送信したプルリクエストに対して自分で催促することも可能です
可能ですがあまりしつこく催促するとクローズされてしまうこともあるので注意しましょう

最後に

簡単ですが、プルリクエストを実施する手順を紹介しました
ボクが一番大変だと思うのはやっぱりプルリクエストの文章を作成するところだと思います
特に初プルリクエストの場合はそのリポジトリ、アカウントの活動や雰囲気もわからないので、どこまでフランクに書けばいいのか判断するのが難しいかなと思います
まぁでも割りと適当でも結構快く受け入れてくれる人が多いかなと思いますw

プルリクエストはOSS開発では非常に便利な機能なのでぜひ使ってみてください

0 件のコメント:

コメントを投稿