[Git] Gitflow로 branch를 관리하자!!

2019. 6. 7. 14:23기타

[Git] Gitflow로 branch를 관리하자!!


Git에 관련된 포스팅은 오랜만인 것 같다...
개인적으로 Git의 여러 개념, 명령어 정도는 알고 있기 때문에 사용하는 데는 무리가 없었다.
하지만 회사 또는 팀 프로젝트에서 협업하면서 git을 사용할 때, 무분별하게 생겨나는 branch들(이게 문제...) 그래서 branch를 효율적으로 관리하기 위한 규칙이나 정책들이 필요하다.

이에 대한 여러 방법 중 하나, 그것이 Gitflow!! 이것에 대해서 정리해보자.

Gitflow 가 무엇인가?

Vincent Driessen 이 제안한 git의 workflow 디자인에 기반한 브랜칭 모델이다.
좀 더 자세히 말하자면 Vincent는 master, develop, feature, release, hotfix 5개 종류의 branch로 나눠서 관리한다고 했다.

아래 그림을 보자.

처음부터 이 그림을 보면, 뭐가 뭔지 잘 모를 것이다. (나도 그랬다...)
그냥 위 그림에서는 "branch가 5가지로 구성되어 있구나" 정도로만 보고 일단 넘어가자.
간단하게 각 branch가 하는 기능은 아래와 같다.

  • feature
    어떤 새로운 기능이 추가되어야 할 때 사용되는 branch이다. 개발이 완료되면, parent인 develop branch로 merge된다. master branch에는 직접적으로 접근 할 수 없다는 점은 기억하자.
  • develop
    develop branch는 product로 release를 할 준비가 된 가장 안정적인 branch라고 보면 된다.(즉, master로 merge하기 전) 개발된 모든 feature가 develope에 merge된다.
  • release
    develop branch에서 어느 정도 feature들을 merge하고 이 쯤에서 release 해야겠다 싶을 때, 생성하는 branch이다. 당연히 develop branch에서 release branch로 merge하고, release가 완료 되면, 다음 release cycle을 진행한다.
  • hotfix
    release된 product에서 발생한 버그같은 것을 수정해야 할 때 사용되는 branch이다. 수정이 완료된 후에는 수정사항을 반영하기 위해 master와 develop branch에 모두 merge된다.
  • master
    가장 core가 되는 branch는 master와 develop이다. 그 중 master는 product로 release하는 branch이다. 모든 변경사항이 결국은 master로 merge되어야 한다.

Gitflow 설치 및 적용

처음에는 git과 gitflow를 별개로 설치해야 하는 줄 알았지만 고맙게도, git이 설치된 상태에서 git flow 명령어를 쳐보니 잘 동작한다...

Git이 설치 되어 있다면 굳이 Gitflow를 따로 설치할 필요가 없을 것 같다.

그래서 Git을 설치하기를 추천한다. 어차피 우리는 Git을 사용하는거니까...
Git 설치 페이지 에서 자신의 OS에 맞는 Git을 설치하자.

설치가 완료되면 폴더를 하나 만들고 커맨드 창에서 "git flow init"을 입력해보자.

Local Git repository가 생성되면서, branch가 없다면서 기본 branch를 생성해야 한다는 메세지가 뜰 것이다.
위 그림에서 볼 수 있듯이, 각 입력을 요구하는 부분에서 옆에 우리가 위에서 잠깐 봤던 master, develop, feature ... 같은 것들이 보인다. (그냥 Enter, Enter로 넘어간다.)

나머지 bugfix나 support branch같은 추가적인 branch가 있는데, 일단 핵심은 위에서 다뤘던 5가지 branch에 집중하자.

"git branch"로 branch를 확인해보면, develop와 master branch만 생성된 것을 볼 수 있다. 가장 기본이 되는 branch 2개이다.


1. Gitflow Getting started

# 초기화

우리는 이미 위에서 gitflow를 시작했다.

git flow init

이미 위에서 해봤찌만, 위 명령어를 통해 기존 git 저장소 내에서 초기화하고, gitflow의 사용을 시작한다.


2. Feature

배포(release)를 위한 새 기능(feature)을 개발한다.
Local Repository에만 존재한다.

# 새 기능(feature) 시작

새 기능의 개발은 develop branch에서 시작한다.

git flow feature start [Branch_Name]

develop branch에 기반한 새 branch를 만들고, 그 branch로 전환한다.

# 기능 완료

새 기능의 개발이 완료되면 아래 명령어를 수행한다.

git flow feature finish [Branch_Name]

feature branch를 develop branch에 merge하고, 해당 feature branch를 삭제하고 develop branch로 돌아간다.

# 기능 게시(Publish)

다른 팀원들과 공동으로 개발 중이라면, remote에 게시하여 다른 사람들이 사용할 수 있게 한다.

git flow feature publish [Branch_Name]

# 게시된 기능 가져오기

다른 사람이 게시한 기능을 가져온다.

git flow feature pull origin [Branch_Name]


3. Release

새로운 제품 출시를 준비하면서, 버그 수정이나 메타 데이터를 준비하는 과정이다.

# 릴리즈 시작

develop branch에서 release branch를 생성한다.

git flow release start <version>

그런데, 위와 같이 release branch를 생성하게 되면 문제점이 하나 있다. local 저장소에만 branch를 생성한 것이기 때문에 다른 팀원들의 release commit을 반영할 수 없다는 점이다.
따라서 다른 사람들의 commit도 반영하고 싶다면 아래와 같이 release branch를 생성하자.(정확히는 게시한다는 것이 맞음)

git flow release publish <version>

# 릴리즈 완료

릴리즈가 완료되면 release version으로 태그(tag)를 달고, master branch에 merge한다.
추가적으로 release 변경사항을 develop branch에도 반영(merge)하고, release branch는 삭제한다.

git flow release finish <version>

* 태그를 push 하는 것도 잊지 말자!!

git push --tags


4. Hotfix

현재 출시된 제품에 문제가 생겨서 즉시 대응해야 할 때 필요하다. master branch에서 hotfix branch를 따서 시작한다.

# 핫픽스 시작

git flow hotfix start <version> [BASENAME]

핫픽스를 시작할 때, 옵션으로 'BASENAME'으로 시작점을 지정할 수 있다고 한다.

# 핫픽스 완료

핫픽스를 완료하면 develop branch와 master branch로 merge된다.

git flow hotfix finish <version>

참고


'기타' 카테고리의 다른 글

[개발환경] Apache Tomcat 설치  (0) 2019.04.09
[기타].gitignore 작성법  (0) 2019.03.14
Git 정리  (0) 2018.07.05