Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
0
Help us understand the problem. What is going on with this article?
@hamakou108

git flow init が完了しているかチェックするシェルスクリプト

git-flow を初めて利用する際には git flow init で初期設定を行う必要があります。
チーム開発で利用するための CI 用のシェルスクリプトを作成していた際、この初期設定が完了しているか確認するスクリプトを書いたのでメモしておきます。

そもそも Git Flow って何?という方は以下の記事が参考になるかと思います。

スクリプト

#!/bin/bash

function warn() { echo "$@" >&2; }

function die() { warn "$@"; exit 1; }

function checkIfGitFlowBranchExists() {
  local branch_config
  local existed_in_local

  branch_config=${1}
  existed_in_local=$(git config --get ${branch_config})

  if [[ -z ${existed_in_local} ]]; then
    die "${branch_config} が存在しません。 Git Flow の初期化を行ってください。"
  fi

  if ! git branch | egrep "\s+${existed_in_local}" > /dev/null; then
    die "${branch_config} に指定したブランチが存在しません。"
  fi
}

function checkIfGitFlowInitialized() {
  # cf. https://stackoverflow.com/questions/28464229/programmatically-determine-if-git-flow-is-initialized
  local master_branch_config
  local develop_branch_config

  master_branch_config="gitflow.branch.master"
  develop_branch_config="gitflow.branch.develop"

  # 1. gitflow.branch.master が設定されており、設定したブランチが存在すること
  checkIfGitFlowBranchExists ${master_branch_config}

  # 2. gitflow.branch.develop が設定されており、設定したブランチが存在すること
  checkIfGitFlowBranchExists ${develop_branch_config}

  # 3. gitflow.branch.master と gitflow.branch.develop に指定したブランチが別のブランチであること
  if [[ $(git config --get ${master_branch_config}) == $(git config --get ${develop_branch_config}) ]]; then
    die "master ブランチと develop ブランチを分けてください。"
  fi

  # 4. release/hotfix ブランチが設定されていること
  if [[ -z $(git config --get "gitflow.prefix.release") || -z $(git config --get "gitflow.prefix.hotfix") ]]; then
    die "release ブランチまたは hotfix ブランチが設定されていません。"
  fi
}

checkIfGitFlowInitialized # 初期設定チェック

git flow init が実行済みかどうかを確認する手順については Stack Overflow の関連 Q&A を参考にしています。
以下に引用した回答の内容をスクリプトとして落とし込んでいます。

Answered here. Basically:
1. Check config for gitflow.branch.master and if the branch does exist in the repo
2. Check config for gitflow.branch.develop and if the branch does exist in the repo
3. Master branch can not be the same as develop branch.
4. Make sure all the prefixes are configured.

1 と 2 では .git/config の以下の設定およびそのブランチが存在することを確認し、加えて 3 で2つのブランチが別々のものであることを確認しています。

[gitflow "branch"]
        master = master
        develop = develop

4 は以下の prefix 設定があるかどうかの確認です。

[gitflow "prefix"]
        feature = feature/
        release = release/
        hotfix = hotfix/
        support = support/
        versiontag =

上記のスクリプトでは release と hotfix しか見ていませんが、必要に応じて feature ブランチなども確認するようにスクリプトを修正してください。

ちなみに

git-flow をデフォルト設定で運用することをチーム内で合意できるのであれば、 git flow init -df で強制的に初期設定を行ってしまった方が早いかもしれません。

0
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
macloud
M&Aクラウドは「テクノロジーの力で、M&Aに流通革命を」をミッションにM&Aプラットフォーム「M&Aクラウド」を開発運営するスタートアップです。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
0
Help us understand the problem. What is going on with this article?