【Git】開発環境から一部の機能だけリリースする手順

師走ですね。
皆様年末に向けて追い込みをかけている時期でしょうか?

開発が込み入ってくると、バージョン管理も複雑になって来ます。

例えば、サービスの運用をしていて複数の機能を実装していると、リリースのタイミングがズレるなんて事はないでしょうか?

f:id:nakahashi_h:20191223012334j:plain

そんな時にどのようにリリースすれば良いのか、私なりの方法で解説します。

手順や用語について

基本的にはgit-frowに乗っ取って進みます。
nvie.com

ページ内ではブランチ名を、英語表記で書きます。
それぞれ下記のような意味合いです。

ブランチ名 ページ内の日本語表記
master 本番用ブランチ
develop 開発用ブランチ
release 公開用ブランチ
hotfix 緊急対応用ブランチ。masterブランチ
feature 開発用ブランチ

masterブランチへのマージ手順

relaseブランチに変更分をdevelopブランチから抽出して、masterブランチにマージします。
今回は、タグやプルリクエストについて触れませんが必要に応じて設定してください。

フローの説明

  1. releaceブランチを切る
  2. developブランチからreleaceに機能1で変更したファイルを抽出
  3. releaceブランチをmasterブランチにマージ
  4. developブランチにマージ
    状況によっては、4番目の作業でコンフリクトを起こす可能性がありますので、適宜調整

f:id:nakahashi_h:20191223021151j:plain

もし、developブランチとmasterブランチが一致しているのであれば、
フローの1'のように、masterブランチからhotfixブランチの要領でreleaceブランチを切って良いかもしれません。

コマンドの解説

前項のフローを実行する時のコマンドについて触れます。

1. releaceブランチを切る

変更元のdevelopブランチからreleaceブランチを切ります。

$ git checkout develop 
$ git brnch -b release

2. developブランチからreleaceに機能1で変更したファイルを抽出

最終的なdevelopブランチからreleaceに機能1で変更したファイルをcheckoutします。
機能1のファイルだけ、developブランチから持ってきますので、下記のようにファイルの変更点を取得します。

$ git checkout develop  (機能1で変更したファイル)

3. releaceブランチをmasterブランチにマージ

変更点を抽出したreleaceブランチをmasterブランチにマージします。

$ git checkout master
$ git merge releace 

4. developブランチにマージ

developブランチから直接マージした訳ではないので、developブランチにもマージします。

$ git checkout develop
$ git merge releace 

この方法の注意点と想定される対応方法

実装内容によっては機能間で処理の上書きをしており、一緒にリリースしないと処理が動かない場合もあります。
技術的な解決は難しい場合もありますので、例えば下記のような方法で回避できるのではないでしょうか。

  • hotfixで本番用に処理を修正する。
    変更内容をdevelopブランチにマージした時にコンフリクトが起きるかもしれませんがdevelopブランチを公開する予定が立っているのであればdevelopブランチに合わせても良いかもしれません。
  • リリース時期の相談をする。

Tips

masterブランチからfeatureブランチを切り出す

もう一つの解決方法は、developブランチではなく、masterブランチからfeatureブランチを切り出して行く方法です。
マージ出来たら、developブランチにもマージします。

qiita.com

意味合い的にはmasterブランチから、featureブランチの要領でhotfixブランチを切って開発を進める方法です。
このフローのメリット、デメリットや見解が載っていますのでこちらも参考にされると良いかもしれません。


以上です。

もちろん、developブランチで機能確認が出来ている状態ですので、一部だけ切り取ってリリースすると新しい問題が発生する場合もあります。
そのままリリースを出来るようにスケジュールを立てるのは重要です。

ただ、どうしようもない時はありますのでこういった方法で対応する事も必要かもしれません。

©︎2017-2018 WebSandBag