最近GitHubでフォークしてプルリクすることを覚えたのでそのやり方のメモです。他の人の成果物に貢献することがとても簡単にできます。
この記事はWebSphere LibertyのDockerfileに小さな間違いを見つけてを直してもらったときの例です。このDockerfileはApache License 2.0であり、一応、OSSにコントリビューションしたことになるのではないでしょうか。自分はインフラ寄りのエンジニアでありOSSへのコントリビューションとは無縁だと思っていましたが、プログラマでなくても例えばドキュメントなど、けっこう簡単にOSSにコントリビューションできるのではという印象です。
手順
以下の手順でフォークしてプルリクします。
フォーク
対象のリポジトリへ行き、右上のForkボタンを押します。
クローン
フォークした自分のリポジトリをクローンします。
git clone git@github.com:sotoiwa/ci.docker.git
upstreamを追加
リモートを確認します。
$ cd ci.docker
$ git remote -v
origin git@github.com:sotoiwa/ci.docker.git (fetch)
origin git@github.com:sotoiwa/ci.docker.git (push)
$
フォーク元リポジトリをupstreamとして追加します。
git remote add upstream git@github.com:WASdev/ci.docker.git
確認します。
$ git remote -v
origin git@github.com:sotoiwa/ci.docker.git (fetch)
origin git@github.com:sotoiwa/ci.docker.git (push)
upstream git@github.com:WASdev/ci.docker.git (fetch)
upstream git@github.com:WASdev/ci.docker.git (push)
$
フォーク元リポジトリとフォークしたリポジトリの同期
フォーク元リポジトリが更新された場合に、フォークしたリポジトリを同期するには以下のようにします。
# ブランチをmasterに変更
git checkout master
# upstreamからpullしてローカルのmasterを更新
git pull upstream master
# ローカルのmasterをoriginにpush
git push origin master
ブランチ作成
ブランチを作成してそのブランチをチェックアウトします。
git checkout -b fix/default-login-shell
修正してcommitしてpush
今回はuserのログインシェルが間違っていたのを修正しました。commitしてpushします。
git add .
git commit -m "Specify correct login shell when adding user"
git push --set-upstream origin fix/default-login-shell
プルリク作成
フォーク元、フォークした自分のリポジトリどちらに行っても、「Compare & pull request」ボタンが現れるので、ボタンを押してプルリクを作成します。
base repogitryがフォーク元のリポジトリのmasterブランチ、head repogitoryがフォークしたリポジトリの修正ブランチであることを確認します。
Issueに対する修正の場合はIssueの番号を書くと関連づけされます。
マージ
無事にマージされました。もし何か指摘された場合は修正してコミットすればいいはずです。
ブランチとフォークの削除
ブランチが必要なければGitHubでプルリクに表示される「Delete branch」ボタンで消しておきます。
フォークしたリポジトリ自体も不要なら「Delete fork」ボタンで消します。
おまけ
マージされるとそのリポジトリのcontributorsに載ります。ちょっと嬉しいです。
OSSライセンスはいろいろよくわかっていなかったので以下の本を読んで勉強しているところです。