概要
GitHub FlowをGitLabで試す
GitHub Flowについては下記を参照
https://gist.github.com/Gab-km/3705015
http://scottchacon.com/2011/08/31/github-flow.html
サンプルシステム仕様
・テキスト表示システム
・引数に指定したテキストを大文字か小文字に変換して返却するだけのシステム
・SampleString.show(text, :uppper)で大文字を標準出力。内部でLowerString.lowerを利用。
・SampleString.show(text, :lower)で小文字を標準出力。内部でUppserString.lowerを利用。
・小文字化の実処理はLowerString.lower(text)で実装
・大文字化の実処理はUppserString.lower(text)で実装
※Flowを簡単に確認する都合上、わざわざ実装する必要がないような仕様になっています。
手順
イテレーション0:初期設定
・GitLabで新規リポジトリを「github_flow_sample」で作成します。
・GitLabのSetting、Membersメニューから必要なユーザーを追加します。
・ローカルでリポジトリをcloneします。
git clone git@ip:user_name/github_flow_sample.git
・空のREADME.mdだけ作成してgit add -A, git commitします
・git push origin masterします
イテレーション1:小文字表示機能を実装する
・担当者がリポジトリをローカルにclone
・masterブランチから実装内容を説明する名称のトピックブランチを作成する
$ git checkout -b lower_string
Switched to a new branch 'lower_string'
$ git branch
* lower_string
master
・LowerStringクラスを作成し、文字列を小文字に変換する機能を実装します
lib/lower_string.rb
class LowerString def self.to_lower(text) text.downcase end end
・こまめにコミット, pushします。
$ git add -A
$ git commit -m "impl lower_string"
$ git push origin lower_string
・続いて、文字列を標準出力するSampleStringクラスを作成します。
lib/sample_string.rb
require_relative './lower_string' class SampleString def self.show(text, lu_case = nil) return if lu_case == nil if lu_case == :lower puts LowerString.to_lower(text) end end end
・これで小文字変換機能の完成です
・コミット, pushします。
$ git add -A
$ git commit -m "complete impl lower string"
$ git push origin lower_string
・小文字変換機能が完成したのでマージリクエストを行います。
・GitLabマージリクエストメニューを選択します。
・New Merge Requestボタンをクリックします。
・下記の設定を行います
マージ元リポジトリにlower_stringを選択します
マージ先リポジトリにmasterを選択します
Titleに「小文字変換機能」と入力します
Assign toに任意の担当者を選択します
milestoneがあれば選択します
Descriptionに「小文字変換機能を実装完了しました。ご確認よろしくお願い致します。」と入力します
・Submit merge Requestボタンをクリックします
・マージリクエストと同時にトピックブランチに対してCIを実行します
・レビュー担当者がマージリクエストを確認します
(マージリクエスト画面にDiffメニューが表示されます)
・今回はそのまま確認OKとしてマージします。
手動マージが不要な内容なのでGitLabのAccept Merge Requestボタンをクリックします。
・マージが完了しました。
・GitLabのNetworkメニューでブランチがマージされていることを確認します
・マージが完了したので、トピックブランチを削除します
$ git checkout master $ git branch -D "lower_string" $ git push origin :"lower_string"
・GitLabの画面上からブランチが削除されたことを確認します
・ローカルのmasterブランチを最新化します
git pull origin master
・最新のmasterでデプロイを行います
イテレーション2:大文字表示機能を実装する
・masterブランチから実装内容を説明する名称のトピックブランチを作成する
$ git checkout -b upper_string
Switched to a new branch 'upper_string'
$ git branch
master
* upper_string
・UpperStringクラスを作成し、文字列を小文字に変換する機能を実装します。ここではわざと実装を間違えておきます。
lib/upper_string.rb
class UpperString def self.to_upper(text) # わざと小文字変換と間違える text.downcase end end
・こまめにコミット, pushします。
$ git add -A $ git commit -m "impl upper_string" $ git push origin "upper_string"
・続いて、文字列を標準出力するSampleStringクラスを修正します。
require_relative './lower_string' require_relative './upper_string' class SampleString def self.show(text, lu_case = nil) return if lu_case == nil case lu_case when :lower puts LowerString.to_lower(text) when :upper puts UpperString.to_upper(text) end end end
・これで大文字変換機能の完成です
・コミット, pushします。
$ git add -A
$ git commit -m "complete impl upper string"
$ git push origin upper_string
・大文字変換機能が完成したのでマージリクエストを行います。(細かい操作は既出なので省きます)
・各種内容を入力し、GitLabのメニューからSubmit merge Requestボタンをクリックします
・マージリクエストと同時にトピックブランチに対してCIを実行します
・レビュー担当者がマージリクエストを確認します
(マージリクエスト画面にDiffメニューが表示されます)
・大文字変換機能に誤りがあります。diffビューを開き該当行の+アイコンをクリックします。
・コメント入力欄が表示されるので、「大文字変換機能ではなく小文字変換機能になっています。修正してください。」と入力します。
・実装担当者はコメントに対してレスをつけます。「承知いたしました。」
・UpperStringクラスを修正します。
lib/upper_string.rb
class UpperString def self.to_upper(text) text.upcase end end
・修正内容をpushします
$ git add -A
$ git commit -m "fix UpperString.to_upper downcase to upcase"
$ git push origin upper_string
・マージリクエストのコメント欄にレスをつけます。「修正致しました。再確認をお願い致します。」
・レビュー担当者がマージリクエストを再確認します
(マージリクエスト画面にDiffメニューが表示されます)
・マージリクエストのコメント欄にレスをつけます。「よろしい。問題ないでしょう。」
・確認OKとしてマージします。
先ほどはトピックブランチを手動で削除しましたが、今回はGitLabのメニューで削除します。
Accept Merge Requestボタンの横にあるRemove source-branchチェックボックスをチェックします。
手動マージが不要な内容なのでGitLabのAccept Merge Requestボタンをクリックします。
・マージが完了しました。
・GitLabのNetworkメニューでブランチがマージされていることを確認します。またすでにupper_stringのトピックブランチが削除されています。
・ローカルのupper_stringブランチを削除します
git branch -D "upper_string"
・ローカルのmasterブランチを最新化します
git pull origin master
・最新のmasterでデプロイを行います