Git flow란?

  • Git flow란 크게 5가지 종류의 브랜치를 가지고 Git을 운영하는 브랜치 기법 중 하나다.
  • 브랜치의 구성은 우리에게 익숙한 masterdevelop 그리고 추가적으로 feature, release, hotfix 브랜치가 있다.
  • 전체적인 큰 그림을 일단 보고가자.
  • 처음에 보면 되게 복잡해보이고 그러는데(나만 그랬나), 이해하고 나면 명쾌하고 꽤 좋은 모델이라고 느끼게 된다.

  • 보자마자 뭔소리야 라고 외친 나같은 사람들을 위해 각각 브랜치의 목적을 정리해보자면 다음과 같다.
  • master 브랜치는 항상 제품으로 출시될 수 있는 상태여야 한다. 한마디로 진짜 출시될 브랜치다.
  • develop 브랜치는 master로부터 파생된 브랜치로 다음 출시 버전을 개발하는 브랜치다.
  • feature 브랜치는 기능을 개발하는 local 브랜치다.
  • release 브랜치는 이번 출시를 준비하는 local 브랜치다.
  • hotfix 브랜치는 출시 버전(master)에서 발생한 버그를 수정하는 local 브랜치다.
  • 자 한 단계씩 알아보자.

feature

  • feature 브랜치는 앞서 말했듯 기능을 개발하는 브랜치로 develop 브랜치로부터 파생되는 브랜치다.
  • origin에 업로드하는 것은 아니고 개발자의 local에만 존재하며 기능 개발이 끝나면 developmerge가 되면서 삭제된다.
  • 이렇게 한 기능씩 추가해나가다 보면 어느덧 출시할 제품이 만들어질 것이다.

develop

  • feature 브랜치에서 하나씩 하나씩 기능을 완성시키다보면 어느덧 출시할 제품이 완성될 것이다.
  • 이렇게 develop 브랜치에서는 feature 브랜치에서 모아진 제품을 바탕으로 release 브랜치를 파생시키게 된다.

release

  • release 브랜치는 이번 출시를 목적으로 생성되며, feature 브랜치와 마찬가지로 local에만 존재한다.
  • 여기에서 모든 테스트를 거쳐 통과가 된 제품은 master로 옮겨지며 출시과정을 거치게 되는 것이다.
  • 만약 이 단계에서 버그가 발견되면 이 브랜치에서 버그를 수정하고 develop 브랜치와 master 브랜치에 merge를 해야한다.
  • 이렇게해야 수정된 버전도 develop 브랜치에 반영되기 때문이다.
  • 이렇게 테스트를 성공적으로 마친 제품은 masterdevelop 브랜치에 merge 되면서 release 브랜치는 삭제된다.

master

  • 이제 거의 다왔다.
  • master 브랜치는 앞서 말했듯 출시될 제품이므로 별다른 설명이 필요없다.
  • 이 브랜치에서 제품을 출시하면 된다.
  • 그런데 만약 출시 후 버그가 발견되면 어떻게 해야할까?
  • 그래서 hotfix 브랜치가 존재한다.

hotfix

  • release에서 모든 테스트에 통과했다고 하더라도 종종 생각지도 못하는 곳에서 버그가 발견되곤 한다.
  • 그럴때 이 hotfix 브랜치에서 작업을 하고, 완료가 되면 masterdevelopmerge하고 브랜치를 삭제한다.

정리

  • 결국 origin에는 항상 masterdevelop만 존재하게 된다.
  • 각 기능에 맞는 브랜치를 관리하면서 명확하고 깔끔하게 브랜치를 관리할 수 있게 된다.
  • 물론 모든 프로젝트에 적용되는 만능은 아니지만 확실히 좋다는 느낌을 많이 받았다.
  • 참고로 Sourcetree 같은 Git Client에서도 Git flow를 지원하기 때문에 merge와 브랜치 삭제 등 귀찮은 작업들을 알아서 해주니 참 편한 것 같다.

참고