Git Flow - 1. 기본 개념 및 명령어

2 minute read

git으로 여러 사람들과 함께 작업하게 되면서 git을 활용한 정형화된 개발 프로세스와 브랜치 활용 방법에 대해 고민하게 되었다.

단일 브랜치 구성이라든지 담당자별로 브랜치 이름을 만들어 작업하는 방식의 브랜치 활용 방법은 초기 셋팅이 편리하고 git에 대해 많은 지식이 없이도 개발을 시작할 수 있게 해줬지만 개발 후 이력 조회나 긴급 수정 사항 반영 등의 상황에서 많은 불편함을 초래했다. 이번 포스트에서는 많이 쓰이고 있는 브랜치 전략 중 하나인 git flow에 대해 알아보며 협업을 하기에 적절한 git 활용 방법에 대해 알아보려 한다.

/assets/images//Untitled.png

개념

develop, master 브랜치를 기준으로 협업, 배포, 코드 관리 등을 용이하게 하는 git 브랜치 전략 중 하나이다.

master, develop, feature, release, hotfix 브랜치 총 5개 브랜치로 코드를 관리하며, 세부적인 브랜치의 정의는 다음과 같다.

master 브랜치

  • 실제 서비스에 사용되는 코드가 관리되는 브랜치
  • 직접적인 수정을 가하지 않음

develop 브랜치

  • 다수 개발자들의 코드를 합쳐 테스트하는 브랜치

feature 브랜치

  • 각 개발자들의 기능 개발을 위한 브랜치
  • develop 브랜치로부터 분기하여 개발하며 완료 후 develop 브랜치로 merge

release 브랜치

  • develop 브랜치의 내용을 master 브랜치로 배포하기 전 최종 수정을 위한 브랜치
  • 마지막 수정 사항 반영하며 완료 후 master와 develop 브랜치로 merge

hotfix 브랜치

  • master 브랜치 코드로 서비스 진행 중 문제 발생 시 hotfix를 위해 만드는 브랜치
  • 버그 수정 후 master와 develop 브랜치로 merge

활용 방법

Git Flow를 활용한 개발 프로세스는 크게 3가지로 구분된다.

상시 유지되는 develop 브랜치로부터 feature 브랜치를 분기하여 개별 기능을 개발하는 기능 개발 프로세스와 develop 브랜치의 개발 내용을 master 브랜치에 반영하는 정기 배포 프로세스, 배포된 버전에 긴급한 문제가 있을 시 hotfix를 진행하는 긴급 수정 프로세스가 반복되며 전체적인 개발이 진행된다.

아래 예시로 git-flow-avh extension 을 활용한 git flow 방법론 적용 방법을 소개한다. git flow를 활용한 자세한 개발 코드나 예시를 보고 싶다면 Git Flow - 2. 샘플 프로젝트를 통한 사용법 예시 (How to/Tutorial) 포스트를 참조하기 바란다.

1. 기능 개발

  • develop 브랜치를 기준으로 개발을 진행하며 각 개발자는 feature 브랜치를 develop 브랜치로부터 분기해 개발 진행
    • git flow feature start PPP-1-do-something (개발자 1)
      • feature/PPP-1-do-something 브랜치 생성됨 (feature 는 git flow init 시 설정한 기본 prefix)
    • git flow feature start PPP-2-do-something (개발자 2)
  • 지속적으로 develop 브랜치에서 pull을 받아 개발하며, 개발이 끝난 사항에 대해 develop 브랜치에 merge해 반영하고 feature 개발에 사용된 브랜치 삭제
    • git pull origin develop
    • git flow feature finish --no-ff PPP-1-do-something
      • 브랜치 merge 후 자동 삭제됨, 브랜치 많이 생기는 것 방지

2. 정기 배포

  • develop 브랜치에 개발된 사항이 배포 가능한 시점이 오면 release 브랜치를 만들고 태그를 달아 master와 develop으로 merge
    • master로 merge 될 때 릴리즈 버전에 대한 git 태그 추가
    • develop 브랜치로부터 release 브랜치 생성
    • git flow release start 0.1
      • release/0.1 브랜치 생성
    • git flow release finish 0.1
      • release/0.1 브랜치를 master, develop 브랜치로 merge 후 master에 0.1 버전 태그 등록, 브랜치 삭제
  • develop 브랜치에서는 release 브랜치에서 변경된 사항 (버그 픽스) 반영해 다시 개발 진행
  • master 브랜치의 코드는 사용자에게 배포되는 서비스로 이용

3. 긴급 수정

  • [Ad-hoc] 서비스 시 긴급 문제가 발생하면 hotfix 브랜치를 만들어 수정 후 master와 develop에 merge
    • release 브랜치와 마찬가지로 버전에 대한 git 태그 추가 (master 서비스 버전이 업데이트 되는 개념)
    • master 브랜치로부터 hotfix 브랜치 생성 (release 브랜치와 차이점)
    • git flow hotfix start 0.2
      • release/0.1 브랜치 생성
    • git flow hotfix finish 0.2
      • release/0.1 브랜치를 master, develop 브랜치로 merge 후 master에 0.1 버전 태그 등록, 브랜치 삭제

References

Leave a comment