UroA 개발 블로그

[Git] git-flow 사용하기 본문

Programming/Git

[Git] git-flow 사용하기

UroA 2016. 10. 20. 00:47

[Git] git-flow 사용하기



 회사에 일하기 시작한지 4개월째이지만 그동안 회사의 주 프로젝트 보다는 기술 리서치가 주된 프로젝트를 하다보니 단순히 코드 백업을 위해서 git을 사용했었다... 이제 다른 개발자들과 git을 사용하여 협업을 해야하는데 현재 git flow를 사용중이여서 공부 후 이를 기록한다.


https://github.com/nvie/gitflow (gitflow's github) 에서 gitflow를 다음과 같이 소개하고 있다.


Vincent Diessen의 branching model을 적용하여 고수준으로 저장소를 관리할 수 있도록 해주는 확장기능


Vincent의 branching model은 'feature - develop - release - hotfixes - master' 단계로 branch를 나눠서 코드를 관리하는 전략이며, 이를 사용자가 쉽게 접근하고 사용할 수 있도록 확장 기능(명령어)을 제공하는 것이 gitflow다. (git flow는 branch 관리를 위한 확장 명령어를 제공하는 역할만 하기 때문에 기존의 git 명령어로도 이를 그대로 구현할 수 있다. 결국 일련의 작업을 한번에 처리해 주는 역할을 하는것이 git flow이다.)



Setup

 

  먼저 제대로 동작하는 git이 설치되어 있어야 한다. Git flow는 OSX, Linux, Windows에서 동작한다.


- OSX


$ brew install git-flow-avh


- Linux


$ apt-get install git-flow



Getting Started


 기존 git 저장소 내에서 초기화하는 것으로 git-flow의 사용을 시작할 수 있다. 명령어를 실행하고 나면 자동으로 master 외에 develop branch가 생성되며, 기본적으로 develop branch에서 개발하고, master로 release하는 방식이다.


$ git flow init


* gitflow를 이용해서 만들 수 있는 branch는 모두 6종류가 있다.


- master : 최종 릴리즈에 사용되는 안정된 버전

- develop : 다음 릴리즈를 위해 개발중인 최신 버전

- feature : 특정 기능 개발을 위한 branch

- release : 릴리즈 점검을 위한 branch

- hotfix : 긴급 버그 픽스를 위한 branch

- support : 버전 호환성 문제를 처리하기 위한 branch


* git flow init 명령어를 실행하면 프로세스 별로 사용할 branch 이름을 입력하라는 메시지가 뜬다. 그러나 -d 옵션을 주어 git flow init -d 명령어로 실행하면 이 과정을 생략할 수 있다.



Features


- 특정한 기능을 개발하기 위한 branch가 필요한 경우에는 feature를 이용한다.


$ git flow feature start <branch name>


 위 명령어를 수행하면 새로운 기능 개발을 위한 branch가 "feature/branch name" 이라는 이름으로 생성되고, 자동으로 해당 branch로 checkout 된다.



- 해당 branch에서 작업을 진행하다가 기능이 완료된다면 해당 명령어를 통해 git flow에 이 사실을 알린다.


$ git flow feature finish <branch name>



 feature finish 명령어가 실행되면 (1) git flow는 develop branch로 checkout 한 후, (2) feature branch의 변경 내용을 자동으로 develop branch에 merge하고, (3) 작업이 끝난 feature branch를 삭제한다.




- 해당 branch를 여러 개발자와 공동으로 개발하고 싶다면 원격 서버에 게시하면 된다.


$ git flow feature publish <branch name>




- 다른 사용자가 게시한 기능을 가져오는 명령어는 다음과 같다.


$ git flow feature pull origin <branch name>



- 만약 해당 branch를 merge 하지않고 삭제한다면 다음과 같이 명령어를 입력한다.


$ git branch -D <branch name>


 

Release


  - release start를 하면 develop branch의 내용을 기반으로 release/<branch name>의 이름을 갖는 새로운 branch를 하나 생성하여 checkout 한다. (release branch는 보통 릴리즈 점검을 위해 간단한 버그를 수정하는 작업 등의 목적으로 사용한다.)


$ git flow release start <version> 



 - release를 위한 점검이 끝났으면 release를 finish 한다.


$ git flow release finish <verison>


 release finish 명렁어가 실행되면 (1) release 브랜치 코드를 master branch에 merge 한 후, (2) release의 이름으로 태그를 등록, (3) release를 develop branch로 재병합(back-merge), (4) release branch를 삭제한다.




* gitflow 참고 사이트

http://danielkummer.github.io/git-flow-cheatsheet/index.ko_KR.html (git-flow cheatsheet)

http://huns.me/development/1131 ([Review] gitflow, 쉬운 git branch 관리)



Comments