カテゴリー別アーカイブ: Pull Request

Pull Requestをとりこむ

Pull Requestが送られてきた場合, 「Merge pull request」のボタンで自動的にマージするのは危険です.

Merge pull request
Merge pull request

そこで, 下記のような手順で安全にPull Requestをとりこみます.

1. コードレビュー

2. 受信側のローカルリポジトリを最新にする

$ git clone 受信側のリモートリポジトリ

あるいは,

$ git pull 受信側のリモートリポジトリ

3. 送信側のリモートリポジトリを取得する

$ git remote add PR送信者 PR送信者のリモートリポジトリ

4. マージ用のブランチを作成

$ git checkout -b pr1

5. マージする

$ git merge PR送信者/ブランチ名

6. 動作を確認する (問題があれば以降の手順はおこなわない)

7. メインのブランチにマージする

$ git checkout master
$ git merge pr1

8. 変更をpushする

$ git push

GitHub Pull Request の基本

昨日に引き続き, 今日もHTML5 ROCKSのリポジトリにPull Requestしました.

(備忘録的な意味もこめて, ) Pull Requestを送る手順をメモしておきます.

1. Pull Requestを送るリポジトリをFork

これは, gitの機能ではなく, GitHubの機能です. リポジトリをForkすることで, 自分の思うように変更が可能になります. Forkするには, 対象のリポジトリのGitHubのページの右上にある「Fork」ボタンを押すだけです.

 

GitHub Fork
GitHub Fork ボタン

2. Forkしたリポジトリをclone

Forkしたリポジトリをローカルの開発環境であつかうために, cloneしてきます. 注意していただきたいのは, Forkしたリポジトリをcloneしてください

$ git clone [Forkしたリポジトリ]

3. 開発用のブランチを作成

masterブランチはいわゆるトピックブランチ (最新の状態で, 常に正常に動作する. 戻りたいときの目印的な役割) としておいたほうがいいので, 新たにブランチを作成します. ブランチ名は適当に決めてください. とりあえず, ここではmy-workとします.

$ git branch
* master
$ git branch  my-work
$ git branch
* master
   my-work
$ git checkout my-work
   master
* my-work

また, checkoutに-bオプションをつければ, ブランチの作成とチェックアウトを同時にできます.

$ git checkout -b my-work

4. git add / git commit

上記の手順までできていれば, あとはふつうにgitでバージョン管理するようにリポジトリを更新していくだけです. Forkしたリポジトリなのでどんな変更をしようが問題ないですし, トピックブランチ (masterブランチ) があるので, いつでも開始状態に戻ることが可能です.

5. リモートブランチの作成

リポジトリの更新をGitHubのForkしたリポジトリに反映するには, GitHub側にもブランチを作成する必要があります.

$ git push origin my-work
$ git branch -r
 remotes/origin/HEAD -> origin/master
 remotes/origin/my-work
GitHub branch
GitHub branch

ブランチをGitHubにも作成すると, リポジトリのページでbranchの切り替えができるはずです.
そこで, リポジトリを更新したbranchであるmy-workに切り替えると, 更新した内容が反映されているはずです.

6. Pull Request

いよいよ最後の手順です. ここまでの作業は言わば自分だけに影響することだったので, そんなに神経質になる必要もなかったのですが, Pull Requestは更新したリポジトリをFork元のリポジトリの制作者に依頼するわけなので, 少し慎重になりましょう.

Pull Request
Pull Request

Pull Requestをするには, Forkした自分のリポジトリの「Pull Request」ボタンを押します.
すると, Pull Requestを送るためのページに切り替わります.

Create Pull Request
Create Pull Request

テキスト入力の箇所は, Pull Requestをした理由を記載します.

「Commits / File Changed」タブで, Pull Requestに含まれるコミットやファイルの差分を確認できます.

以上を確認して問題がなければ, 「Create pull request」ボタンを押します. これで, Fork元のリポジトリの制作者に通知されます.

あとは,  Fork元のリポジトリの制作者が確認をして問題がなければmergeしてくれて, 自分にもその通知が届きます.

* リポジトリのアップデート

Fork + clone してきたリポジトリのmasterブランチはトピックブランチにしておくとメモしましたが, そのままの状態で最新の状態に保たれるわけではないので, 定期的にアップデートして最新の状態にすることが必要です.

1. アップデート用のリモートリポジトリを作成

アップデート用のリポジトリ名をupstreamとします.

$ git remote add upstream [Fork元のリポジトリ]

ここでのポイントは, Fork元のリポジトリを指定することです. そうでないと, 最新のリポジトリの状態を参照することにならないからです,

2. 更新

更新するために, トピックブランチであるmasterブランチにチェックアウトします.

$ git checkout master

そして, 最新のリポジトリのデータを取得します.

$ git fetch upstream
   remote: Counting objects: 14, done.
   remote: Compressing objects: 100% (12/12), done.
   remote: Total 14 (delta 7), reused 6 (delta 2)
   Unpacking objects: 100% (14/14), done.
   From https://github.com/html5rocks/www.html5rocks.com
   13498ed..2cfc907  master     -> upstream/master
    //... etc

最後に, 取得した最新のリポジトリのデータをトピックブランチ (masterブランチ) にマージします.

$ git merge upstream/master
   Updating 0dd88ed..2cfc907
   Fast-forward
   CALENDAR.md                                        |  2 +-
   content/tutorials/webaudio/intro/en/index.html     |  2 +- 
   content/tutorials/webaudio/intro/ja/index.html     | 35 ++++++++-----
   .../webaudio/intro/static/js/filter-sample.js      |  3 +-
   .../webaudio/positional_audio/ja/index.html        | 58 ++++++++++++----------
    5 files changed, 59 insertions(+), 41 deletions(-)
    // ...etc

ちなみに, 既に最新の状態である場合には, 「Already up-to-date」と表示されます.

$ git merge upstream/master
   Already up-to-date.

以上が, Pull Requestを送る基本となります. 最初は手順が多そうに感じますが, やってみると案外そうでもないです.
Pull Requestは敷居が高そうで実はそうでもなく, でも素晴らしい機能なのでどんどん利用しましょう.

オープンソースとPull Request

HTML5 ROCKSの位置オーディオと WebGL の統合のデモがThree.jsとWeb Audio APIのAPI変更により動作しなくなっていたのを自分で改修していたのですが, 元々の制作者により対応されました.

それにともない, 記事のサンプルコードも修正されたのですが, 日本語版の記事のサンプルコードが古いままだったので,

  1. リポジトリをFork
  2. Forkしたリポジトリをローカル環境にclone
  3. 作業用のブランチを作成 (masterはトピックブランチにしておくため)
  4. 修正したものをcommit / push
  5. Pull Request

何気にGitHubのPull Request機能を使うのは初めてでしたが, こんな些細なことでもオープンソースに貢献できるんだなと思いました.

今まで, オープンソースに貢献するというとすごく敷居が高いイメージがあったのですが, 最初はこういった些細な修正から始めることでいいんだなと思いました. そして, GitHubのPull Request機能がそれを可能にしてくれます.

これを機に, ソーシャルコーディングにもどんどんチャレンジしてオープンソースに貢献していきたいです.