Pocket

モチベーション

GithubでOSSを管理するレポジトリにプルリクを飛ばして変更をMergeされるまでの流れを残したい

背景

GithubでForkをしないプルリクを飛ばすことは良くあるが,Forkをした時のプルリクの飛ばし方がよくわかっていなかった.今回,homebrew-caskに新しいCaskを追加する機会があり,このタイプのプルリクを飛ばした.実際にやってみるとそれほど難しくなかったので,手順概要と具体的な手順を残しておく.

手順概要

  1. Githubページでプルリク対象のレポジトリを自分のアカウントにForkする
  2. Forkしたレポジトリを自分のPCにCloneする
  3. Cloneしたレポジトリでブランチを切る
  4. Cloneしたレポジトリでファイルを変更する
  5. 変更内容をCommitをする(Commitログはrebaseして1つにまとめる)
  6. 自分のアカウントにCommitをPushする
  7. 自分のアカウントからFork元のレポジトリに対してプルリクを飛ばす
  8. プルリク内容の変更依頼に対応する
  9. 作成者にプルリクをMergeしてもらう

例) homebrew-caskに新しいCaskを追加する

homebrew-caskはhomebrewを拡張して,アプリケーションのインストールや管理する機能を提供する.インストールできるアプリケーションはCaskとして管理されており,`brew cask install cask名`でインストールできる.普段使っているアプリケーションのCaskがない場合は自分でCaskを作成して,開発元に提供することもできる(エコシステムになっている).今回ファイル名を一括変換できるShupapanというアプリケーションのCaskがなかったので,自分で作成し,プルリクを送ったのでその手順を見てみよう.

1. homebrew-caskを自分のGithubアカウントにForkする

まずはGithubにログインして,hombebrew-caskの本家のレポジトリを自分のアカウントにForkをする.Forkはボタンをクリックするだけで簡単にできる.
20150113_fork
20150113_fork

2. PCにForkしたレポジトリをCloneする

自分のアカウントにForkしたレポジトリをPC(開発環境)にCloneする.

➤  git clone git@github.com:takanabe/homebrew-cask.git

3. Cloneしたレポジトリでブランチを切る

masterブランチで開発を進めるのではなく,開発用のブランチを新たに作成する.

➤  cd homebrew-cask
➤  git checkout -b add_shupapan

4. ファイルを変更する

Caskにshupapan.rbを追加する.Caskの作り方はhomebrew-caskのREAEMEや他のサイトを参考にした.

5. 変更内容ををCommitする

➤  git add -A
➤  git commit  -m "Add Shupapan"

6. Commit内容をpushする

➤  git push

7. Fork元のレポジトリに対してプルリクを飛ばす

20150113_make_pullreq

8. プルリク内容の変更依頼に対応する

よくあることだが,ドヤ顔でプルリクを飛ばしてMergeされるのを待っていると,
作者から内容を変更してよと言われて変更を余儀なくされることがある.

20150113_pull-reqest

その場合はプルリクを一度クローズする必要はなく,Cloneしたレポジトリで改めてファイルを変更してCommitすれば良い.この時,きれいなCommitログを残すために以下のように新しいCommitを直前のCommitに混ぜ込んでgit push --forceすれば良い.こうすることで自動的にプルリクエストのCommit内容も変更される.

➤  git add -A
➤  git commit --amend
➤  git push --force

このプルリクを送って,プルリク内容を変更して,再度プルリクを送る,というのがプルリクを使用したソーシャルコーディングの醍醐味である.

9. 作成者にプルリクをMergeしてもらう

20150113_Merge

まとめ

homebrew-caskにプルリクエストを飛ばしてMergeされるまでの流れを体験した.OSSにプルリクエストを飛ばしたことがない人は,homebrew-caskにプルリクエストを飛ばしてみるのは有りだと思う.

参考

Pocket

Share Your Thought

CAPTCHA