본문 바로가기
Server/Ubuntu

[GIT FLOW] git flow를 사용해 보자!

by 유주원 2017. 11. 14.

기존 git branch에 대해 좀 더 효율적인 branch 관리를 위해 도입한 glt flow를 사용해 보기로 했다. 

기존의 git의 경우 master와 develop 두 가지의 branch 전략만 기본으로 제시하고 있는데, git flow에서는 이를 좀 더 세분화 해서 branch 를 나누고 있다.

우선 우리가 가장 잘 알고 있는 master와 develop branch부터 살펴보자면, master는 실제 배포를 위한 branch, develop은 배포를 하기 위한 작업 branch라고 생각하면 된다.

이 develop branch에서 간혹 문제가 발생되는데, 가령 A라는 기능을 만드는 도중에 A 기능 개발을 잠시 중단하고 B 기능을 개발해야 된다면 어떻게 해야 될까? A 기능을 주석처리한 다음에 B를 개발하는게 일상적인 일일 것이다.

git flow에서는 feature 라는 branch를 새로 생성해서 위와 같은 상황에 대응할 수 있도록 제시하고 있다.

develop에서 개발하고자 하는 각 기능을 feature branch로 새롭게 따고, 해당 branch에서 각각의 기능을 개발하면 된다. 가령 A 기능 개발을 잠시 중단하고 B 기능을 개발해야 된다면, 기존 feature A branch를 그대로 놔둔 채 새로운 feature B branch를 생성하고 기능을 개발하면 된다.

release branch 역시 develop에서 발생한다. release branch는 실제 배포할 준비가 된 경우에 사용이 된다. 나같은 경우에는 develop에서 개발하고 변경 된 사항을 항상 master에 pull 해서 develop과 master의 동기를 맞췄는데, 이렇게 release 전략을 짜서 배포하는 것도 큰 도움이 될 것 같다.

마지막으로 hotfix는 master에서 발생하며, 운영 버전에서 발생된 에러 등을 긴급히 수정할 필요가 있을 때 적용할 수 있는 branch 이다.

그럼 이제 실제 git flow를 설치해보고 사용해 보자. (참고로 맥 기준)

아래와 같이 git flow를 설치한다.

$> brew install git-flow

나 같은 경우에는 git-flow 0.4.1이 설치가 되었다. (아직 1.0도 아니네 -_-;;)

git-flow 설칙가 완료되었으면, git 프로젝트로 가서.. git-flow init을 실행하자.


위의 그림과 같이 master , develop, feature, release, hotfix, support(이건 아직 진행중인 branch인 것 같다.)를 생성하도록 초기화를 진행 할 것이다.

이 상태에서 feature branch를 생성해서 기능을 추가해 보자. 참고로 feature branch는 develop branch에서 파생되어서 develop branch로 merge한다.

$> git flow feature start add_help_comment


add_help_comment feature branch가 새롭게 생성이 되었으며, git flow feature list를 통해 현재 feature branch 목록들을 살펴볼 수가 있다.

$> git flow feature list


readme.txt 파일을 생성한 후, git commit 을 완료한 다음 feature finish를 해주자. 

$> touch readme.txt

$> git add readme.txt

$> git commit -m "add readme.txt"

$> git flow feature finish add_help_comment


위의 명령을 실행하면, add_help_comment branch는 삭제되고 develop에 merge가 될 것이다. 참고로 feature finish 명령은 아래의 단계를 함축한 명령어라 할 수 있다.

$> git checkout develop

$> git merge --no-ff feature/add_help_comment

$> git branch -d feature/add_help_comment


위의 방식으로 develop에서 각각의 기능을 보다 효율적으로 개발할 수 있다.

release 와 hotfix 마찬가지로 feature 와 같은 방법으로 동작시키면 된다. 추가로 release와 hotfix의 경우는 finish 때 develop과 master에 merge가 된다.