GitHub

GitHub 협업 가이드 - 브랜치 전략

sangwonYoon 2023. 5. 17. 15:01

Git Flow

기본 브랜치로 main, hotfix, release, develop, feature 브랜치가 존재한다.

중심이 되는 브랜치는 main과 develop 브랜치이다.

  • main 브랜치
    • 언제든지 배포할 수 있는 코드가 존재하는 브랜치
    • 배포용 브랜치이므로 main 브랜치에 직접 commit해서는 안된다.
    • develop, release, hotfix 브랜치에서만 main 브랜치에 merge할 수 있다.
  • develop 브랜치
    • 개발이 진행된 코드를 관리하는 브랜치
    • develop 브랜치에서 여러 개발자가 작업을 하게 될 경우, conflict가 자주 발생할 수 있으므로, 실제 개발 작업은 feature 브랜치에서 이루어진 후, develop 브랜치로 merge하는 방식으로 진행된다.
  • feature 브랜치
    • 개발을 진행하는 브랜치
    • Issue에 등록된 기능, bugfix, refactoring 등의 작업을 수행한다.
    • 하나의 feature 브랜치는 하나의 작업과 대응하도록 브랜치를 생성한다.
    • feature 브랜치의 작업이 완료되면 develop 브랜치로 merge한다.
    • feature 브랜치 이름 앞에 Issue 태그를 붙여 어떤 작업을 하는 브랜치인지 표시할 수 있다.
      • <prefix>-<Issue 태그>/<브랜치 이름>
      • ex) feat-12/branch_name (12번 이슈를 해결하는 기능 구현 브랜치라는 의미) 
  • release 브랜치
    • 실제 배포를 하기 직전에 준비 작업을 하는 브랜치
    • develop 브랜치에서 다음 배포를 위한 개발이 끝나면 release 브랜치로 가져와서 bugfix와 refactoring과 같은 작업들을 수행한다.
    • 코드에 변경사항이 있는 경우, 지속적으로 develop 브랜치로 merge한다.
    • 배포 준비가 끝난 경우에는 main 브랜치로 merge한다.
  • hotfix 브랜치
    • main 브랜치에 심각한 버그나 문제가 발생했을 때 문제 해결을 위해 생성하는 브랜치
    • main 브랜치에 직접 commit할 수 없기 때문에 hotfix 브랜치에서 문제를 해결한 뒤, main 브랜치에 merge한다.
    • 또한, develop 브랜치에도 같은 문제가 존재할 것이기 때문에 develop 브랜치에도 merge를 진행한다.

 

merge된 feature, release, hotfix 브랜치는 삭제한다.

Git Flow는 여러 버전의 소프트웨어를 지원해야하는 개발 환경에 적합하다.

 

GitHub Flow

웹 어플리케이션의 경우, 항상 최신의 단일 버전만 사용자에게 제공되기 때문에 여러 버전을 병렬적으로 지원할 필요가 없다.

또한, 수시로 배포하는 웹 어플리케이션의 특성상 배포하기까지 지나치게 오랜 시간이 걸리는 Git Flow는 웹 어플리케이션 개발에 적합하지 않다.

위와 같은 문제점들을 해결하기 위한 브랜치 전략이 GitHub Flow이다.

GitHub Flow는 main 브랜치와 feature 브랜치로 구성된다.

  • main 브랜치
    • Git Flow의 main, develop, release 브랜치의 역할이 합쳐진 형태이다.
    • 언제든지 배포할 수 있는 코드가 존재하는 브랜치
  • feature 브랜치
    • Git Flow의 feature, hotfix 브랜치의 역할이 합쳐진 형태이다.
    • 개발을 진행하는 브랜치

 

GitHub Flow에서는 local에서 작업한 내용을 수시로 push하여 remote를 항상 최신 상태로 유지하는 것을 원칙으로 한다.

또한, GitHub Flow에서는 feature 브랜치에서 main 브랜치로 바로 merge하기 때문에 엄격한 코드 리뷰 이후에 merge가 진행되어야 한다.

장기간 프로젝트가 진행되고, 핫픽스 등 유지보수를 위한 작업을 수행해야하는 팀은 Git Flow가 적합하다.
반면, 상시 배포를 해야하는 팀은 GitHub Flow가 적합하다.
- Scott Shacon (GitHub의 CIO, GitHub Flow의 창시자)

GitHub Flow는 상시 배포가 가능하며, 버전 관리가 필요하지 않은 개발 환경에 적합하다.

'GitHub' 카테고리의 다른 글

GitHub 협업 가이드 - Tag  (0) 2023.06.03
GitHub 협업 가이드 - Pull Request  (0) 2023.06.02
GitHub 협업 가이드 - Issue  (0) 2023.05.27
GitHub 협업 가이드 - Commit Convention & Pre-commit  (1) 2023.05.26