はじめに
最近、Microsoft さんが GitHub で公開している OSS へのプルリクエスト(PR)を送ることが多くなりました。
PR は、フォークした自身のリモートリポジトリ -> 本家リポジトリ
の形で送っていますが、本家リポジトリはかなりの頻度で更新が行われているため、本家リポジトリをフォークした時点と PR を送る時点にて、内容に多くの差分があることがあります。
そのため、自身の忘備録として、PR を送る前にやることをまとめました。
PR前にやること
upstream の設定
これは、GitHub 上でフォークする時は(おそらく)自動で行ってくれていると思いますが、きちんと本家のリポジトリが upstream に設定されているかを確認します。
今回は、Visual Studio Code の Azure Databases 拡張機能を例にしていきます。
Fork したリポジトリを Clone しているディレクトリに移動します。
cd vscode-cosmosdb
git remote -v
を実行して、upstream が設定されているか確認しましょう。
git remote -v
origin https://github.com/ymasaoka/vscode-cosmosdb.git (fetch)
origin https://github.com/ymasaoka/vscode-cosmosdb.git (push)
upstream https://github.com/microsoft/vscode-cosmosdb.git (fetch)
upstream https://github.com/microsoft/vscode-cosmosdb.git (push)
はい、きちんと設定されています。
もし、upstream が設定されていない場合は、きちんとフォーク元の上流リポジトリを設定しましょう。
git remote add upstream https://github.com/microsoft/vscode-cosmosdb.git
フォーク先のリポジトリを最新化
フォーク先のリポジトリが、フォーク元のリポジトリの最新の状態と同期するようにします。
上流リポジトリから、ブランチと各ブランチのコミットをフェッチします。
git fetch upstream
フォーク先のリポジトリを更新
現在見ているブランチを master に変更します。
git checkout master
upstream/master
からmaster
ブランチに変更をマージします。
フォーク元のリポジトリに存在しない、独自のコミットが存在する場合は、ファーストフォワードでマージが行われます。
git merge upstream/master
この操作では、フォーク先のリポジトリのローカルが最新化されただけなので、きちんとリモートのフォーク先リポジトリにプッシュをします。
git push origin master
これで、フォーク先のリモートリポジトリが最新化されました。
最新化したのち、きちんと PR を送りましょう。
おわりに
プロジェクトによっては、リポジトリをフォークせずにブランチで対応する、などもありますが、OSS 界隈では特に 個人として貢献している といった見え方を推奨している部分もあるので、よくフォークしがちな時分です。
PR 出したいは良いものの、コードが古くてマージしてもらえない、相手にマージしてもらうために無駄な作業を行わせてしまう、といった負荷を与えないためにも、リポジトリは最新化した状態で PR を送りたいですね。
**なお、これを実施したからといって必ず PR が承認されるわけではありません。**その点、予めご承知おきいただければと思います。