git-flow 사용하기

gitflow’s github page에 들어가보면 gitflow를 다음과 같이 소개하고 있다.

Vincent Driessen’s의 branching model을 적용하여 고수준으로 저장소를 관리하기 위한 Git 확장 콜렉션

Vincent의 branching model은 feature – develop – release – hotfixes – master 단계로 branch를 나눠서 코드를 관리하는 전략이다.

git-flow 설치

https://github.com/nvie/gitflow/wiki/Installation
Git flow는 OSX, Linux, Windows에서 동작한다. 본인은 맥을 쓰고 있으므로 OSX 설치를 진행했다.

$ git flow init

git flow init을 하면 프로세스 별로 사용할 branch 명을 입력하라는 메시지가 뜬다.
develop branch에서 개발하고, master로 realease하는 방식으로, 기본값은 develop, master이다.
기본값으로 사용하고 싶으면 그냥 엔터만 입력하면 된다.
이 과정을 생략하고 싶다면 git flow init -d를 입력하여 -d 옵션을 주면 된다.

gitflow의 branch 종류

  • master : 최종 릴리즈한 안정화 버전
  • develop : 다음 릴리즈를 위해 개발중인 최신 버전
  • feature : 특정 기능 개발을 위한 branch
  • release : 릴리즈 점검을 위한 branch
  • hotfix : 긴급 버그 픽스를 위한 branch
  • support : 버전 호환성 문제 처리를 위한 branch

Feature

  • 새 기능(feature) 시작하기
    $ git flow feature start [branch name]
    //git flow feature start myfeature
    

    develop에 기반한 새로운 feature branch name을 생성되고, 자동으로 해당 branch로 checkout된다.
    develop -> feature/myfeature

  • 기능 완료
    $ git flow feature finish [branch name]
    // git flow feature start myfeature
    

    develop branch로 checkout 한 후, myfeature branch를 develop에 merge하고 feature branch를 삭제한다.
    feature/myfeature -> develop

  • 기능 게시
    $ git flow feature publish [branch name]
    

    여러 개발자와 공동으로 개발하고 싶다면, 기능을 윈격 서버에 게시하면 된다.

  • 기능 가져오기
    $ git flow feature pull origin [branch name]
    

    다른 사용자가 게시한 기능을 가져온다.

  • branch 삭제
    $ git branch -D [branch name]
    

    해당 branch를 merge하지 않고 삭제된다.

Release

  • release branch 생성
    $ git flow release start [branch name]
    

    release start를 하면 develop branch에 기반한 release/[branch name]의 이름을 갖는 새로운 branch를 만들어서 checkout한다.
    develop -> release/v0.0.1

  • release branch 완료
    $ git flow release finish [branch name]
    

    release branch의 코드를 master branch에 merge하고, release의 이름으로 태그를 등록한다.
    release를 develop branch로 재병합(back-merge)하고, release branch를 삭제한다.

Hotfix

$ git flow hotfix
$ git flow hotfix start <release> [<base>]
$ git flow hotfix finish <release>
$ git flow feature publish <name>
$ git flow feature pull <remote> <name>