Git

[GIT] GitFlow 이해와 사용

걸어가는 신사 2022. 1. 17. 04:30

위 글은 코드프레소 Java 웹 개발 체험단 활동 중

실무자가 알려주는 Git 활용한 프로젝트 관리 수업을 듣고 정리한 글입니다.

코드프레소 URL : https://www.codepresso.kr/


GitFlow 모델

Git 브랜치 활용 전략
  • 브랜치를 활용하여 변경점을 관리하는 모델
    • master branch
    • develop branch
    • feature branch
    • release branch
    • hotfix branch

GitFlow

(1) master

  • 실제 고객에게 릴리즈 되는 브랜치(production)
  • 모든 변경사항은 결국 master로 최종 반영되어야 한다.

master branch

(2) develop

  • 실제 개발의 중심이 되는 브랜치
  • 즉, 모든 기능이 추가되고 버그가 수정되고, 고객에게 배포 가능한 수준이 되면 develop의 내용은 master에 최종 반영되어야 한다.
  • 다음 배포할 기능 개발하는 브랜치

develop branch

(3) feature

  • 기능을 개발하는 브랜치
  • develop 브랜치로부터 분기되어 사용된다.
  • feature 브랜치의 단위 : 기능, 스프린트 주기
  • 기능 개발이 완료되거나 스프린트 주기가 종료되면 develop 브랜치로 내용 merge 후 브랜치 삭제된다.

feature branch

(4) release

  • 배포를 준비(검증, 이슈 수정 등) 하는 브랜치
  • 배포 가능한 상태가 되면 master 브랜치로 병합한다.
  • release 브랜치에서 기능 점검 시 발견한 이슈에 대한 수정사항은 반드시 develop에 병합해야 한다.
  • master, develop 브랜치 이후 병합 이후 release 브랜치는 삭제된다.
  • 배포 준비가 완료되면, 최종 master로 병합하고 tag를 명시해야 한다.

release branch

(5) hotfix

  • 배포한 버전에서 긴급하게 수정이 필요한 장애 및 버그 발생 시 대응하는 브랜치
  • hotfixs는 master로부터 분기되며, 이슈가 수정되면 수정 사항은 master, develop에 병합을 통해 최종 반영되어야 한다.
  • master, develop 브랜치 병합 이후 hotfix 브랜치는 삭제된다.

hotfix branch


GitFlow 사용법

 

1. GitFlow 설치

  • 윈도우 환경에서 GitBash를 사용하면 이미 설치되어 있으므로 설치할 필요가 없다.
  • 우분투 환경에서는 "apt-get"을 이용해서 설치할 수 있다.
$ sudo apt-get install install git-flow

 

2. GitFlow 초기화

  • GitFlow를 사용하기 위해서는 초기화가 필요한다.
  • GitFlow 초기화를 통해서 브랜치들을 생성한다.
$ git flow init

$ git flow init -d // 기본값으로 브랜치들이 생성된다.

$ git flow init

  • master, develop, feature, bugfix, release, hotfix, support 모두 기본 브랜치 명으로 지정하였다.
  • master : 사용자에게 배포되는 Stable 브랜치
  • develop : 다음 릴리즈를 위해 기능들을 모으는 최신 브랜치
  • feature : 기능을 개발하는 브랜치
  • hotfix : 긴급 버그 픽스를 위한 브랜치
  • support : 버전 호환성 문제를 위한 브랜치
  • Version tag prefix
    • master 브랜치로 릴리즈 버전이 병합될 때 생성되는 태그(Tag)의 프리픽스(Prefix)를 설정할 수 있는 선택 항목이다.
  • Hooks and filters directory
    • git hook을 위한 디렉토리이다.

$ git branch

  • GitFlow 모델의 메인 브랜치인 master, develop 브랜치 생성 후 develop 브랜치로 이동된다.

 

3. feature branch

(1) 기능 개발

$ git flow feature start [개발할 기능명]

ex) $ git flow feature start login

(2) 기능 개발 완료

$ git flow feature finish [개발할 기능명]

ex) $ git flow feature finish login
  • 1) feature 브랜치 -> develop 브랜치로 merge
  • 2) feature 브랜치 삭제
  • 3) develop 브랜치로 이동

(3) 원격 저장소에 push

  • 다수의 개발자가 함께 기능 개발 시 원격저장소에 기능 브랜치를 push 해야 한다.
$ git flow feature publish  [개발할 기능명]

ex) $ git flow feature publish login
  • origin으로 설정된 원격 저장소로 브랜치를 push 한다.

(4) 원격 저장소에서 pull

$ git flow feature pull origin [개발할 기능명]

ex) $ git flow feature pull origin login

 

4. release branch

(1) 릴리즈 시작

$ git flow release start [버전명]

ex) $ git flow release start 1.0

(2) 릴리즈 push

$ git flow release publish [버전명]

ex) $ git flow release publish 1.0

(3) 릴리즈 pull

$ git flow release track [버전명]

ex) $ git flow relase track 1.0

(4) 릴리즈 종료

$ git flow release finish [버전명]

ex) $ git flow release finish 1.0
  • 1) release 브랜치를 master 브랜치에 병합(merge)한다.
  • 2) release 버전을 태그로 생성한다.
    • git flow init에서 명시한 Version tag prefix 문자열이 release버전 앞에 추가되어 태그로 생성된다.
  • 3) release 브랜치를 develop 브랜치에 병합한다.
  • 4) release 브랜치를 삭제한다.

 

5. hotfix branch

(1) 긴급 이슈 발생

$ git flow hotfix start [버전명]

ex) $ git flow hotfix start issue_1

(2) 긴급 이슈 종료

$ git flow hotfix finish [버전명]

ex) $ git flow hotfix finish issue_1
  • 1) hotfix 브랜치를 master 브랜치로 병합한다.
  • 2) hotfix 버전을 태그로 생성한다.
    • git flow init에서 명시한 Version on tag prefix 문자열이 hotfix 버전 앞에 추가되어 태그로 생성된다.
  • 3) hotfix 브랜치를 develop 브랜치에 병합한다.
  • 4) hotfix 브랜치를 삭제한다.
반응형