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

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

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

社内のあちこちで 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 ||<

*参考サイト

-Git を使った分散開発管理 15 – git-flow を使ってみる | Classmethod.dev() -git-flow によるブランチの管理 - O'Reilly Japan Community Blog -nvie/gitflow