SourcetreeのGit Flowをつかった開発フロー

Git運用でGit Flowを採用することにしたので
SourcetreeのGit Flowをつかった開発フローを整理しました。

# 実現したいこと
- Gitに慣れていないメンバーでも無理なく運用可能なこと
    - Git, Git Flowの操作はSourcetreeですべて実行
    - ただし、GitおよびGit Flowの概念は理解していることが前提
- Github上でコードレビューを実施
    - __feature__から__develop__へのPull Requestをレビュー
    - コードはレビューワーがマージ

# SourcetreeにGit Flowが表示されていない場合
1. ツールバー上で右クリックし、ツールバーのカスタマイズを選択
<img src="https://qiita-image-store.s3.amazonaws.com/0/68702/150ed908-51e7-36c2-8f54-5452e2296c41.png" width=30%>

2. Git Flowをドラッグ＆ドロップしツールバーに追加
<img src="https://qiita-image-store.s3.amazonaws.com/0/68702/4d5c3ad2-74a6-0576-c2fa-984ecd796174.png" width=30%>

# 開発フロー

## リポジトリの初期化
はじめてGit Flowボタンを押すとリポジトリの初期化画面が表示されます。
運用ルールに合わせてカスタマイズすることができます。
基本的にデフォルト設定のままで問題ありません。
<img src="https://qiita-image-store.s3.amazonaws.com/0/68702/c1316373-943b-1960-b97d-d0e830f5e988.png" width=30%>

## 機能開発開始
Git Flowボタンを押すと推奨するアクションが表示されます。
開発着手時は「新規フィーチャーを開始」をクリックします。
<img src="https://qiita-image-store.s3.amazonaws.com/0/68702/afa70d60-3e8f-4cbe-96c2-c8480b68048d.png" width=20%>

フィーチャー名を入力してOKを押すとdevelopからfeatureが作成されます。
<img src="https://qiita-image-store.s3.amazonaws.com/0/68702/2977a170-12fc-8006-f791-8e22dd5df6e8.png" width=40%>
この場合はfeature/sampleが作成されます。
<img src="https://qiita-image-store.s3.amazonaws.com/0/68702/8f8dbf84-c974-2ce5-ba8b-7b5535c277d0.png" width=20%>

## レビュー
実装が完了したらfeatureをプッシュして、Github上でプルリクエストを作成します。
<img src="https://qiita-image-store.s3.amazonaws.com/0/68702/729a9056-99dd-2f7d-d073-3ae43eb72183.png" width=40%>
<img src="https://qiita-image-store.s3.amazonaws.com/0/68702/395d9d7d-9466-25da-d55a-dbbbdbdc62e6.png" width=50%>

レビューが完了したらGithub上でマージします。
<img src="https://qiita-image-store.s3.amazonaws.com/0/68702/41be7687-d01d-89aa-c6df-03512368deda.png" width=50%>
次のステップで自動的にブランチが削除されるので、ここではブランチを削除する必要はありません。

## 機能開発終了
Git Flowボタンを押し、現在のブランチを終了ボタンをクリックします。
<img src="https://qiita-image-store.s3.amazonaws.com/0/68702/bb8b82d8-b127-c7c0-c86f-db0c033dbe00.png" width=30%>

ブランチを削除を選択した状態でOKをクリックするとローカルとリモートのブランチが自動的に削除されます。
<img src="https://qiita-image-store.s3.amazonaws.com/0/68702/0d2d2913-0f7e-96d4-1dc1-84b0ac64102b.png" width=40%>

最後にdevelopでソースコードをpullします。
このときに「マージではなくリベースする」にチェックを入れます。
<img src="https://qiita-image-store.s3.amazonaws.com/0/68702/bd3f4366-31a3-c3bd-4685-e70b02708055.png" width=40%>

featureの変更内容はすべてdevelopに取り込まれているので、履歴はこのようになります。
<img src="https://qiita-image-store.s3.amazonaws.com/0/68702/ae62f4e7-5e44-8196-12ce-eb58f9ad16d8.png" width=60%>



## リリース
Git Flowボタン押し、新規リリース開始をクリックします。
<img src="https://qiita-image-store.s3.amazonaws.com/0/68702/afa70d60-3e8f-4cbe-96c2-c8480b68048d.png" width=20%>
リリースバージョンを入力し、OKを押すとdevelopからreleaseが作成されます。
<img src="https://qiita-image-store.s3.amazonaws.com/0/68702/7885b1a9-d4c9-1e8e-78ae-a05e0b6c5098.png" width=40%>
<img src="https://qiita-image-store.s3.amazonaws.com/0/68702/b94f9368-65ec-f8f7-f6aa-b210bcfb001f.png" width=30%>

リリース作業が完了したらGit Flowボタンを押し、現在のブランチを終了をクリックします。
<img src="https://qiita-image-store.s3.amazonaws.com/0/68702/a1f611a6-d788-a696-7aa4-944c443c50ed.png" width=40%>
タグのメッセージを入力とブランチのプレビューの確認します。
<img src="https://qiita-image-store.s3.amazonaws.com/0/68702/78502a06-6170-7c85-2a1c-0221a78538c6.png" width=40%>
問題ないことを確認してOKを押すとrelease は master, develop の両方にマージされます。
featureのときと同様にGithub上でマージとすることも可能です。
<img src="https://qiita-image-store.s3.amazonaws.com/0/68702/a26152d9-478d-2036-ee01-618fa0fb9c8c.png" width=70%>

# まとめ
- Sourcetreeを使用することで、git, git-flowのコマンドを知らなくてもGit Flowで開発をおこなうことができます。
- Github上でのコードレビューも問題なくおこなうことができます。
- ローカル/リモートのブランチの削除、タグの追加がgit-flowでされるので、オペレーションミスが少なくなります。

# 参考記事
[A successful Git branching model](https://nvie.com/posts/a-successful-git-branching-model/)