師走ですね。
皆様年末に向けて追い込みをかけている時期でしょうか?
開発が込み入ってくると、バージョン管理も複雑になって来ます。
例えば、サービスの運用をしていて複数の機能を実装していると、リリースのタイミングがズレるなんて事はないでしょうか?
そんな時にどのようにリリースすれば良いのか、私なりの方法で解説します。
手順や用語について
基本的にはgit-frowに乗っ取って進みます。
nvie.com
ページ内ではブランチ名を、英語表記で書きます。
それぞれ下記のような意味合いです。
ブランチ名 | ページ内の日本語表記 |
---|---|
master | 本番用ブランチ |
develop | 開発用ブランチ |
release | 公開用ブランチ |
hotfix | 緊急対応用ブランチ。masterブランチ |
feature | 開発用ブランチ |
masterブランチへのマージ手順
relase
ブランチに変更分をdevelop
ブランチから抽出して、master
ブランチにマージします。
今回は、タグやプルリクエストについて触れませんが必要に応じて設定してください。
フローの説明
releace
ブランチを切るdevelop
ブランチからreleace
に機能1で変更したファイルを抽出releace
ブランチをmaster
ブランチにマージdevelop
ブランチにマージ
状況によっては、4番目の作業でコンフリクトを起こす可能性がありますので、適宜調整
もし、develop
ブランチとmaster
ブランチが一致しているのであれば、
フローの1'
のように、master
ブランチからhotfix
ブランチの要領でreleace
ブランチを切って良いかもしれません。
コマンドの解説
前項のフローを実行する時のコマンドについて触れます。
1. releace
ブランチを切る
変更元のdevelop
ブランチからreleace
ブランチを切ります。
$ git checkout develop
$ git branch -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
ブランチにもマージします。
意味合い的にはmaster
ブランチから、feature
ブランチの要領でhotfix
ブランチを切って開発を進める方法です。
このフローのメリット、デメリットや見解が載っていますのでこちらも参考にされると良いかもしれません。
以上です。
もちろん、develop
ブランチで機能確認が出来ている状態ですので、一部だけ切り取ってリリースすると新しい問題が発生する場合もあります。
そのままリリースを出来るようにスケジュールを立てるのは重要です。
ただ、どうしようもない時はありますのでこういった方法で対応する事も必要かもしれません。