OSS(Open Source Software)のコミュニティー(本家)のリポジトリにPull Requestを出す時にいつも手順が分からなくなってしまいます1。例によって調べながらやりますが、ページによって記載がまちまちだったりします。そこで備忘録として手順をまとめておくことで迷わずスムーズにPull Requestを出せる様にしておこうと思いました。また、ただGitのコマンドを羅列しただけの備忘録では無く、実際にVega EditorというOSSにコントリビュートしてみた行程をまとめて残しておこうと思います。
GitHubを例に解説しますが、その他のGitベースのサービス(GitLab, BitBucket等)も基本的に(コマンド)操作は同じです。
OSSのリポジトリをForkする
今回はVega EditorというOSSにコントリビュートしてみようと思います。たまたま今回この記事を執筆するタイミングで修正箇所が有った為、選択したという次第です。Forkを実施するためにまずはOSSのGitHubのリポジトリ2にアクセスします。OSSのリポジトリを自分のGitHubアカウントにForkして自分リポジトリとして扱える様にします。Forkの方法は下図の赤丸のFork
ボタンをクリックするだけです。
Forkしたリポジトリのクローン
Forkしたリポジトリは自分のユーザー名/リポジトリ名
3という名前が付きます。このリポジトリにまず修正を反映します。修正作業を行うためにリポジトリをローカルにクローンします。下図のClone or download
をクリックします。ここで、パスワード認証(HTTP)かSSH認証によってURLが異なります。URL横のクリップボードマークをクリックすることでURLをコピー出来ます。
今回の検証に使っているリポジトリでは以下のコマンドになります。
git clone git@github.com:y-vectorfield/editor.git
Upstreamブランチ情報の登録
これ以降登場する用語の早見表をまず掲載します。これは所謂どこのリポジトリを指しているかのエイリアスの様な物です。
エイリアス | 指しているリポジトリ |
---|---|
リモート(origin) | 自分のアカウントのリモートリポジトリ4 |
ローカル | 自分のローカル作業環境上のリポジトリ |
upstream | OSS本家のリポジトリ5 |
それでは本家のリポジトリをupstream
としてgit config
に登録します。URLは本記事での例です。
git remote add upstream https://github.com/vega/editor
登録結果を確認します。
git config -l
末尾に以下の内容が追加されていれば成功です。
remote.upstream.url=https://github.com/vega/editor
remote.upstream.fetch=+refs/heads/*:refs/remotes/upstream/*
修正を反映し、Commit & Push
修正用のブランチに必ずスイッチしてからローカルで修正を行い、まずリモートリポジトリに修正を反映させます。今回はdocker-compose.yml
にrestartオプションを追加する修正を行います。
OSSのコミュニティーによってContributionルール(ブランチ名の付け方、commitメッセージの書き方等を指定)を定めている場合はルールに則ります。
2024/1/1追記: 参考情報
TensorFlow, PyTorch, scikit-learnへのコントリビューション時の参考情報は以下
$ git checkout -b add-restart-option
Switched to a new branch 'add-restart-option'
version: "3.7"
services:
editor:
init: true
build: .
ports:
- "8080:8080"
volumes:
- "./src:/usr/src/app/src"
+ restart: "always"
この修正が反映されることで、マシーンの再起動後必ずコンテナが再起動する様になります。後はリモートにcommit & pushを実施します。
$ git add .
$ git commit -m "Add restart option into docker compose yml file"
$ git push origin add-restart-option
Pull Requestをコミュニティー(本家)に提出
Compare & pull request
をクリックします。Pull Requestに添付するコメントを入力する画面が表示されます。コメント後Create pull request
をクリックし、提出します。
提出後、多くの場合テストやフォーマットチェックなどが実行されます。完了すると下図の様な表示となります。
無事Mergeされました
Pull Requestが無事Merge
(採用)されました!!これでOSS本家のリポジトリに修正が反映されました。
Merge後のupstreamの内容をローカル, リモートに反映
無事Pull RequestがMergeされたので、その内容をローカル
とリモート(origin)
に反映します。この行程は今後Pull Requestを出す時に、コミュニティーのリポジトリが更新されていた(手元のリポジトリが古い)場合にも実施します。
ローカルブランチがmaster
にチェックアウトされて居ない場合はチェックアウトします。
git checkout master
まずupstreamの最新版の内容をfetch
します。
git fetch upstream
ローカルのmaster
ブランチにupstream
の内容をmerge
します。
git merge upstream/master --ff-only
最後にリモートのmaster
ブランチに更新を反映します。
git push origin master -u
下図の様にコミュニティーのリポジトリ(upstream)とリモートリポジトリが同じ状態になりました。
まとめ
OSSのコミュニティーにPull Requestを出す手順を備忘録を兼ねてまとめてみました。これでGitの仕様が変更にならない限りは操作に困らなくなります。
Reference
-
業務等で頻繁にPull Requestを出しておられる方には何でも無いことなのかもしれませんが、趣味でやっているため、どうしても断続的になりがちです。。。 ↩
-
本記事の場合: https://github.com/vega/editor ↩
-
筆者の場合: y-vectorfield/editor ↩
-
本記事の場合: https://github.com/vega/editor ↩