読者です 読者をやめる 読者になる 読者になる

彼女からは、おいちゃんと呼ばれています

ウェブ技術や日々考えたことなどを綴っていきます

既存のリポジトリに git-flow を導入してみた

Git

社内のあちこちで git-flow を使っているのを見聞きして、じゃあ僕も、と試そうとしてみたのですが、ググって出てきた情報は、新規にリポジトリをつくるやり方ばかりで、

(新規のリポジトリではなくて)既存のリポジトリにも git-flow って導入できるの?

と疑問に思ってやってみたところ、思いのほか、あっさりとできてしまったのでメモしておきます。

既存のリポジトリに git-flow を導入してみた

  • 1. そもそも git-flow ってナニ?
  • 2. A successful Git branching model の開発モデル
  • 3. git-flow のインストール
  • 4. 事前に develop ブランチを作成
  • 5. 既存のリポジトリに git-flow を導入
  • おまけ - 事前に develop ブランチを作成していなかった場合

1. そもそも git-flow ってナニ?

git-flow とは Git の運用を補助してくれるプラグインのひとつです。

気軽にブランチを切ったりマージできたりするのが Git の良さですが、複数人で開発する際には(いや、ひとりの場合でも)一定のルールがあったほうが混乱せずにすみます。

そこで、Vincent Driessen さんというエロい人が「こういうやり方で開発を進めていったらうまくいったよ。みんなもどう?」という提言を「A successful Git branching model」としてまとめてくれました。

git-flow はこの「A successful Git branching model」の開発モデルを補助してくれます。

2. A successful Git branching model の開発モデル

「A successful Git branching model」の詳しい内容は、日本語訳 を参照するのがよいかと思いますが、ざっくりまとめると下記のような感じです。

  • 中央リポジトリとみなす origin を用意する
  • origin は master と develop のブランチを持つ
  • master はリリース用のブランチで、リリースしたらタグ付けする(SVN でいう trunk と tag)
  • develop は開発用ブランチ。リリース準備ができたら master へマージする
  • 細かい開発は develop で行うが、新機能追加などは develop から分岐させたフィーチャーブランチで行う

3. git-flow のインストール

git-flow は Mac では Homebrew からインストールできます。僕の環境ではバージョン 0.4.1 が入りました。

$ brew install git-flow

4. 事前に develop ブランチを作成

git-flow では、上記のとおり、リリース用のブランチ master と、開発用のブランチ develop をメインブランチとして使います。違う名称のブランチを使うこともできるのですが、僕は右にならえで master と develop を使いたいと考えました。

今回 git-flow を導入したいと考えた既存のブランチでは、それまで master ブランチと、scratch という名前のブランチを使っていました。

git-flow 導入に伴い、develop ブランチを使うのであれば、このタイミングで develop ブランチを作成しておく必要があります。

$ git checkout master
$ git branch develop

5. 既存のリポジトリに git-flow を導入

既存のリポジトリへ git-flow を導入するには、意外にも「git flow init」でいけます。特に理由がなければ、ブランチ名もデフォルトのままでよいかと思います。

$ git flow init
Initialized empty Git repository in /Users/inouetakuya/Dropbox/Projects/git-flow/.git/
No branches exist yet. Base branches must be created now.
Branch name for production releases: [master]
Branch name for "next release" development: [develop]

How to name your supporting branch prefixes?
Feature branches? [feature/]
Release branches? [release/]
Hotfix branches? [hotfix/]
Support branches? [support/]
Version tag prefix? []

以上で、git-flow を既存のリポジトリへ導入する手順は終わりです。

あとは、

$ git flow feature start foo

などして、開発を進めていけます(詳しくはページ下部の参考サイト参照)

僕の場合は、リリース番号をいちいち決めるのが面倒なのでリリースブランチは使っていませんが、それ以外はひととおり使っていて、大変便利に感じています。よろしければ使ってみてください。

おまけ - 事前に develop ブランチを作成していなかった場合

ちなみに、事前に develop ブランチを作成していなかった場合は、下記のようにエラーが出ます。

$ git flow init

Which branch should be used for bringing forth production releases?
   - master
   - scratch
Branch name for production releases: [master]

Which branch should be used for integration of the "next release"?
   - scratch
Branch name for "next release" development: [master] develop
Local branch 'develop' does not exist.

が、ブランチをつくって git flow init やり直せばよいだけなので、特に問題ありません。

$ git branch develop
$ git flow init