OSSへのコントリビュートするときのリポジトリの設定
OSSへのコントリビュートを経験しました。 その際、リポジトリの用意など調べながら進めたのでこの記事にメモしておきます。
元のリポジトリをフォークして、修正してプルリクエストを出す。という作業をするためのリモート・ローカルリポジトリの構成の説明です。
概要
- 自分のアカウントへフォークする
- ローカルへcloneする
- 作業を行うブランチを作成
- リモートにブランチをpush
- プルリクエストを作る
- 必要なら修正
- フォーク元リポジトリの更新を反映する
- 書き込み権限があるなら
自分のアカウントへフォークする
OSSのリポジトリは間違いなく書き込む権限がありません。直接cloneしてもリモートへpushできませんし、リモートにbranchを作ることもできないと思います。
まずは自分のアカウントにフォークを行います。リポジトリの右上のボタンでできます。
自分のアカウント以下に同じリポジトリがコピーして作成されます。ここは自分の管理下なので書き込み等を行うことができます。
ローカルへcloneする
フォークしたリモートリポジトリをローカルにcloneします。
作業を行うブランチを作成
フローやコミュニティのルールにもよると思いますが、とりあえずmasterに変更を加えるのではなくローカルに作業ブランチを作成しましょう。
リモートにブランチをpush
フォークした自分のリモートリポジトリへpushして、リモートリポジトリにも作業ブランチを作成します。
以降、作業ブランチで構築を行いcommitして、リモートの作業ブランチへpushします。
プルリクエストを作る
作業が完了したらプルリクエストを作ります。
自分のアカウントのリモート作業ブランチのリポジトリにプルリクエストを作成するボタンがあるので、そこから作成します。
自分のアカウント:リポジトリ名/作業ブランチ
から OSS管理者:リポジトリ名/master
へのプルリクエストを行います。開発フローによってはdevelopブランチへのプルリクエストなどもあると思いますので注意しましょう。
作業の進捗がわかるようにとか、議論ができるように早めにプルリクエストを作っておくといいそうです。 コミュニティのルールや方針にもよると思います。
必要なら修正
以降はローカルの作業ブランチで修正、リモートの作業ブランチへpush。
作業が完了したら、githubにて管理者のリポジトリのmasterブランチへプルリクエストを出します。
フォーク元リポジトリの更新を反映する
フォークした自分のリポジトリには、fork元リポジトリに行われた管理者や他の開発者の変更が反映されません。放置しておくと差異が大きくなり衝突が起きる可能性が大きくなるので、pushの前などこまめに反映しておく必要が有ります。
フォーク元リポジトリ、すなわちOSS管理者:リポジトリ/master
をリモートに追加して、そこからfetchとmergeをおこないます。
以下のコマンドでフォーク元のリポジトリをremoteに追加します。「upstream」という名前で登録しています。
git remote add upstream git@github.com:oss管理者/リポジトリ.git
リモートupstreamから情報をfetchします。
git fetch upstream
ローカルのブランチへ変更をmergeします。
git merge upstream/master
書き込み権限があるなら
直接リポジトリをcloneして、作業するブランチを作成。ブランチで作業が終わったらリモートにbranchを作成して、そこからリモートのmasterへプルリクエストすれば良いです。
管理が減るのでこっちのほうがスッキリしますね。OSSでは通常無いのかなと思います。管理者やプロジェクトに入ればできると思います。
おわりに
OSSへのコントリビュートできる機会があったのでやってみましたが、とても簡単な内容でしたのでそんなに自慢できるものでもありません。
ただ、初めてやってみてとても興味を持てたので、機会を見つける・自分で立ち上げる等してOSSへの貢献を目指したいと思います。