GitHubでPullRequestを受けた時にどうするか

AXRatingViewやAXStretchableHeaderTabViewControllerといったOSSを公開してから、GitHub上でPullRequestを受けることが多くなった。細かい修正が多かったので動作確認せずマージしていたんだけど、動作確認が必要なPullRequestが増えてきたので、PullRequestを受けた時にどうするべきか調べた。ちなみに、これは自分以外のリポジトリからPullRequestを受け入れる場合の話で、例えば同じリポジトリの別ブランチに向けたPullRequestの話ではない。

  • PullRequestの動作確認
  • コードレビュー
  • Merge pull requestして感謝

参考文献:
http://akisute.com/2011/02/github-pull-request.html

PullRequestの動作確認

以下の操作で、新しく作ったブランチに別リポジトリの指定したブランチの内容を取り込める。

$ git checkout develop
$ git checkout -b pr/bug-fix
$ git pull https://github.com/example/Example.git issues/bug-fix

コードレビュー

  • お好きなように。

Merge pull request

  • イエーイ

Merge pull request

gitで差分を抽出してpatchで使えるファイルを生成

gitで差分を抽出してpatchで使えるファイルを生成したい時、毎回同じ検索ワードで検索して、毎回同じサイトを見ていたので、自分用にメモ。普通のpatchコマンドで取り込めるdiffファイルをgitで作成する – kanonjiの日記という記事が自分にとって一番分かりやすかった。このページを参考に、自分が使う用に書いておく。

$ # ファイルを生成
$ git diff (diffの方法) > (パッチ名.patch)
$ # 実行結果を確認
$ patch --dry-run -p1 < (パッチ名.patch)
$ # ファイルを適用
$ patch -p1 < (パッチ名.patch)

$ git diff develop features/dummy > diff.patch
$ patch --dry-run -p1 < diff.patch
$ patch -p1 < diff.patch

gitに関する書籍

Capistranoでdeployすると”fatal: Could not parse object”と出る

Capistranoで、新しく作ったブランチをデプロイしようとしたらエラーが起きた。例えば以下のような感じ。

$ cap staging deploy -s branch=mybranch
    triggering load callbacks
  * 2013-04-25 11:51:27 executing `staging'
    (中略)
    [my-deploy-server.example.com] executing command
 ** [my-deploy-server.example.com :: out] fatal: Could not parse object '4n58rzpt8w4iuvzdau5hylb82gsxxvg7hhcjyucc'.
    command finished in 7935ms

“fatal: Could not parse object”の行は赤字で表示される。この問題の原因は、Capistrano側で設定されているgitのリポジトリに引数で指定されたブランチが存在していないことだった。自分の場合は、ローカルでちゃんと$ git push origin mybranchを実行してから再度cap deployを実行することで、問題が解決した。

gitで後からリモートを追加する

git initしたあとにリモートを追加してorigin masterを省略するメモ – gabuchanの日記に答えが書いてあった。

例えば、クライアントでプロジェクトをプロジェクトを新規作成、しばらく経って「githubにアップロードしておこう」と思った時に使う。以下のように実行すればよい。

$ git remote add origin git@github.com:username/gitname.git
$ git pull origin master
$ git push -u origin master

元のページと比べてgit pullを追記しているのは、githubでリポジトリを新規作成した時にREADMEを自動生成した場合、競合を防ぐためにpushの前にpullが必要だったから。

よく使うgit(自分用)

gitでよく使うコマンドをメモ。随時アップデートする。

ブランチを新規作成 + 切り替え

$ git checkout -b (new_branch_name)

リモートブランチを持ってくる

$ git checkout -b (local_branch_name) origin/(remote_branch_name)

ローカルで作ったブランチをリモートに新規作成してpush

(remote_branch_name)は特に変更する必要がなければローカルのブランチ名と一緒でよい。

$ git push origin (remote_branch_name)

ちなみに、以下のように–set-upstreamを付けると、次回からgit pushだけでよくなる。

git push --set-upstream origin (remote_branch_name)

ブランチ名を変更する

カレントブランチの名前を(new_branch_name)に変える。

$ git branch -m (new_branch_name)

(old_branch_name)の名前を(new_branch_name)に変える。

git branch -m (old_branch_name) (new_branch_name)

ブランチを削除する

(branch_name)はremotes/origin/development/myfeatureの、development/myfeatureの部分。
ローカルブランチを削除して、リモートブランチを削除する

$ git branch -d (branch_name)
$ git push origin :(branch_name)

全部削除

$ rm -rf ./*
$ git rm -r ./*

別のブランチの内容を取り込む

現在のブランチに取り込みます。

$ git merge (another_branch_name)

サブモジュールの内容を修正した場合

サブモジュールのディレクトリに移動して、コミットしてプッシュしてから、プロジェクトのディレクトリでコミットする。

$ cd ./submoduels/subproject/
$ git commit -a
$ git push origin (remote_branch_name)
$ cd ..
$ git commit -a