gitとは?gitflowとは?

2 min read読了の目安(約2100字

はじめに

今回はコミュニティ参加者から質問のあったGitについて書いていきます。
Gitについて理解し、使えるようになりましょう!

質問内容

課題1から2、3は多分終わりました。やっとpushできました。。。
flutter以前にgitが使えない感じです。まだgitで何ができて、
何ができないのか自体がわかっていないせいか調べるのも苦労してます…gitは単純にバージョン管理してるだけ…?なのでしょうか

目次

  1. Gitとは
  2. バージョン管理の種類
  3. Gitの運用フロー
  4. まとめ

1. Gitとは

バージョン管理ツールの一つです。
なんでバージョン管理をする必要があるのか?それは以下2点が主な理由として挙げられます。

  • 変更履歴を残したい
  • コンフリクトの発生を防ぎたい

例えば

  • feature/#1をdevelopにマージした時は動作が正常だったが、feature/#2をマージしたら不具合が発生したとする。
    • まずブランチを切らないでmainブランチでcommitしないで作業していた場合、細かく動作確認して行かないと何をして不具合が起きたのかわかりません。
    • 機能ごと・作業ごとにブランチを切って作業をすることで、安全にアプリが動くブランチを担保して、作業をすることができます。
gitで何ができて、何ができないのか?

Gitは開発をする上で「どんな実装をして・それによってどんな差分が発生した」のか履歴を残すことで、不具合等のリスクを抑える役割があると言えます。

2. バージョン管理の種類

バージョン管理にはGitとSVNがあります。

SVNって何?

Gitの前はSVN(Subversion)が使われていた

SVNとGitの特徴

共有リポジトリに管理するファイルを格納している

SVNとGitの違い

  • SVN: 集中型
    • ローカル環境のファイルをリポジトリにコミット(変更内容を保存)する
  • Git: 分散型
    • リモートリポジトリが存在するため、コミット内容が他の開発メンバーに影響を与えない
    • ローカルリポジトリが存在し、ローカル環境のファイルをローカル環境にコミットする
    • ローカルリポジトリの内容をリモートリポジトリにプッシュして変更を反映する

3. Gitの運用フロー

いろんな考え方がありますが、MHTではこんなイメージで実施しています。

  • git-flow(4-7人程度の開発規模の場合向け?)
    • main
      • 現在本番に上がっているものと同じ
      • いつでもリリースできる状態
    • develop
      • 開発の確認用
      • mainブランチから作成
    • feature
      • 個別での開発ブランチ
      • developブランチから作成し、プルリクエストが承認されたらdevelopブランチにマージする
    • hotfix
      • バグ修正ブランチ
      • リリース後に発生した緊急度の高いバグ修正を行う
    • release
      • リリース用のブランチ
      • developブランチから作成し、リリース作業が終わったらdevelopとmainブランチにマージする

  • GitHub Flow(1-3人程度の開発規模の場合向け?)
    • main
      • 現在本番に上がっているものと同じ
      • いつでもリリースできる状態
    • feature
      • 開発ブランチ
      • mainブランチから作成し、プルリクエストが承認されたらmainブランチにマージする

4. まとめ

  • Gitとはバージョン管理ツールの一つであり、開発の履歴を残したり・複数人での開発を実現させるためのものです。
  • 集中型であるSVNとは違い、Gitは分散型でリモートリポジトリをもたせることで、コミット内容が他の開発メンバーに影響を与えないような仕組みになています。
  • 運用フローとして代表的なものにはGit FlowやGitHub Flowがあり、開発者が複数人いるプロジェクトでは基本GitHub Flowを使用して運用しています。