git flow 사용해보기

|

개인적인 연습 내용을 정리한 글입니다.
더 좋은 방법이 있거나, 잘못된 부분이 있으면 편하게 의견 주세요. :)


git flow install

  • 홈페이지: git flow install
  • macOS: brew install git-flow-avh
  • linux: apt-get install git-flow

Git-flow 구성 살펴보기

git-flow에는 5가지 종류의 브랜치가 존재한다.
항상 유지되는 메인브랜치(master, develop)과 일정 기간동안만 유지되는 보조브랜치(feature, release, hotfix)

master

master 브랜치에 merge된 내역은 새로운 버전이 갱신되었다는 것을 의미한다. 즉, master 브랜치에 변경된 내역이 생기면 최종 버전인 Tag를 통해 Production에 배포된다.

develop

hotfix를 제외한 모든 변경내역이 출발하는 지점이다. develop브랜치의 코드가 안정화되고 배포할 준비가 되면 master를 통해 배포 버전의 태그를 단다.

feature

feature 브랜치는 배포하려고 하는 기능을 개발하는 브랜치다. 기능을 개발하기 시작할 때는 언제 배포할 수 있을지 알수 없다. 기능을 다 완성할 때까지 유지하고 있다가 다 완성되면 develop 브랜치로 병합한다.

  • 브랜치가 생성되는 대상: develop
  • merge 대상: develop

release

release 브랜치는 실제 배포할 상태가 된 경우에 생성하는 브랜치이다.

  • 브랜치가 생성되는 대상: develop
  • merge 대상: develop, master

hotfix

미리 계획되지 않은 브랜치다. 기본적인 동작방식은 release와 비슷하다. 배포 이후에 생긴 치명적인 버그는 즉시 해결해야하기 때문에 문제가 생기면 master 브랜치에 만들어둔 태그 tag로 부터 긴급 수정을 위한 브랜치를 생성한다.

  • 브랜치가 생성되는 대상: master
  • merge 대상: develop, master

즉, 처음에는 master와 develop 브랜치만 존재한다. 이때 develop 또한 master에서부터 시작된 브랜치이다.

새로운 기능에 대한 추가 작업이 있는 경우 develop에서 feature브랜치를 생성하고 해당 feature브랜치에서 새로운 기능을 개발한다. 즉, feature 브랜치는 항상 develop브랜치에서부터 시작하게 된다. 기능 추가 작업이 완료되었다면 feature브랜치는 develop 브랜치로 merge를 하게된다.

develop 브랜치에 feature 브랜치에서 만든 기능들이 merge 되었다면 QA를 하기 위해 develop브랜치에서부터 release 브랜치를 생성한다. QA를 진행하면서 발생한 버그들은 모두 release 브랜치에서 수정이 된다. QA를 무사히 통과했다면 release 브랜치를 master와 develop 브랜치에 merge를 한다.

마지막으로 출시된 master 브랜치에서 버전 태그를 추가하면 최종적으로 우리가 개발하고자했던 모든 기능들은 master 브랜치에 포함됨으로써 해당 기능을 출시할 수 있게 된다.

git flow 흐름 살펴보기

git flow

이미지원본: 우아한형제들 기술블로그

  • Upstream Remote Repository: 개발자들이 공유하는 저장소, 최신 코드가 저장되어 있는 원격저장소
  • Origin Remote Repository: Upstream Repository를 Fork한 원격 개인 저장소
  • Local Repository: 내 컴퓨터에 저장되어있는 개인 저장소

git flow 간단하게 시작해보기

  • Local Repository에서 작업을 완료한 후 작업 브랜치를 Origin Repository에 push
  • Github에서 Origin Repositorydp push한 브랜치를 Upstream Repository로 merge하는 pull request 생성
  • 코드리뷰를 거친 뒤 merge
  • 다시 새로운 작업을 할때 Local Repositorydptj Upstream Repository를 pull
1. Upstream Repository를 나의 Origin Remote Repository에 Fork
2. 해당 git url을 clone

git flow init

# 기본 설정이 develop에 되어있을 것
git flow feature start [생성할 branch name]
git merge develop
git flow feature finish [삭제할 branch name]

# release
git flow release start [생성할 release name]

# release를 master, develop에 merge
# tag로 master의 버전 확인
git flow release finish [완료할 release name]


git pull origin develop #이 상황 무한 반복

feature 브랜치에서의 참고사항

  • feature 브랜치에서 작업을 하는 동안은 develop 브랜치의 변경사항을 자주 동기화해준다.
  • 반대로 feature 브랜치의 변경사항은 develop 브랜치로 merge하는 경우는 기능 구현이 끝났을때, 딱 한번이다.
  • 작업을 완료한 feature브랜치는 삭제해도 괜찮다.

release 브랜치에서의 참고사항

  • release의 수정사항들은 develop으로 자주 동기화해준다.
  • 하지만 release 브랜치 생성 후의 develop 브랜치의 수정사항은 동기화 하지 않는다.
    • 해당 develop 브랜치의 변경사항은 다음 배포 버전에 대한 것이기 때문에 다음 release 생성까지 merge하지 않는다.