あるOSSプロダクト(ここではpostgres とする)の派生プロダクトのメンテナンスで、マイナーバージョンアップする際の手順を以下に備忘録として記す。
1. メンテナンスするプロダクトを用意する。
まず、git clone。
$ git clone https://github.com/XXX/postgres.git $ cd postgres
次に対象バージョンにcheckout。
$ git checkout PG_13_STABLE
さらに作業用のブランチを作成。
$ git checkout -b dev
2. オリジナルプロダクトのリポジトリを準備する。
remoteコマンドでリポジトリを登録し、fetchでデータを取り込む。
remote コマンドでは -t オプションで必要なブランチを指定する。
$ git remote add pg13 -t REL_13_STABLE https://github.com/postgres/postgres.git $ git fetch pg13
fetchが終わればremote リポジトリは不要なので、削除しておく。
$ git remote rm pg13
3. コミットをcherry-pickする。
git cherry-pickコマンドで、必要なコミットを取り込む。
$ git cherry-pick 8493831385814c4f22b1d5b5d8a9227a2eb82712..272d82ec6febb97ab25fd7c67e9c84f4660b16ac
競合が発生すると止まるので、git statusコマンドで競合が発生したファイルを確認し、適宜修正する。
$ git status -s
修正が終わったらgit addで修正したファイルをインデックスに追加する。
$ git add xxx/xxxx/xxx.c
cherry-pick --continueコマンドでcherry-pickを継続する。
$ git cherry-pick --continue
これを繰り返して、全てのコミットを取り込む。
4. 変更をマージする。
dev ブランチでの作業が終わったら、元ブランチに戻ってgit mergeコマンドを実行する。 ここでは全変更を一つのコミットに集約してマージする。なので--squash と --no-commitオプションを設定する。 最後にcommit する。
$ git checkout PG_13_STABLE $ git branch * PG_13_STABLE dev $ git merge --no-commit --squash dev $ git commit -m "updated to 13.3"