既存のリポジトリに git-flow を導入してみた
社内のあちこちで git-flow を使っているのを見聞きして、じゃあ僕も、と試そうとしてみたのですが、ググって出てきた情報は、新規にリポジトリをつくるやり方ばかりで、
と疑問に思ってやってみたところ、思いのほか、あっさりとできてしまったのでメモしておきます。
**既存のリポジトリに git-flow を導入してみた
- そもそも git-flow ってナニ?
- A successful Git branching model の開発モデル
- git-flow のインストール
- 事前に develop ブランチを作成
- 既存のリポジトリに 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