본문 바로가기
ETC/Git

[Git] GitFlow

by 컴돈AI 2023. 12. 14.

목차

    GitFlow

    • 개발자가 많아질 경우 브랜치를 대충 아무렇게나 만들고 merge를 하다 보면 매우 복잡하게 됩니다. 이러한 것을 방지하기 위해 git branch를 깔끔하게 만들도록 도와주는 여러 방법론들이 있습니다. 
      • GitFlow / Github Flow / Trunk-based / Gitlab Flow
      • 이 중 가장 유명한 Git Flow에 대해서 살펴보도록 하겠습니다.
    • GitFlow는 아래 5개의 브랜치를 운영하여 프로젝트를 관리합니다.
      • main
      • develop
      • feature
      • release
      • hotfix
    • main 브랜치
      • 프로덕션 레벨의 코드가 저장되는 브랜치입니다.
        • 프로덕션 레벨(Production Level)이라는 용어는 실제 사용자가 사용하는 소프트웨어의 최종 버전을 의미합니다.
      • 릴리스 된 코드만이 이 브랜치에 병합되며, 프로덕션에 배포되는 코드의 출처가 됩니다.
      • 항상 안정적이고 실행 가능한 상태를 유지해야 합니다.
    • develop 브랜치
      • 개발을 위한 주요 브랜치로, main 브랜치에서 분기됩니다.
      • 새로운 기능 개발과 버그 수정이 이루어지는 곳입니다.
      • 개발 과정 중 생성되는 모든 기능 브랜치의 기반이 됩니다.
    • feature 브랜치
      • 새로운 기능 개발이나 실험을 위해 develop 브랜치에서 분기됩니다.
      • 기능 개발이 완료되면 develop 브랜치로 다시 병합됩니다.
      • 이름은 보통 개발하려는 기능을 반영하여 지정합니다. (ex: feature/new-login-page)
    • release 브랜치
      • 새로운 프로덕션 릴리스를 준비하기 위해 develop 브랜치에서 생성됩니다.
      • 릴리스 준비를 위한 최종 버그 수정, 문서 작업 등을 수행합니다.
      • 준비가 완료되면, main 브랜치와 develop 브랜치 양쪽에 병합됩니다.
    • hotfix 브랜치
      • main 브랜치에서 발생한 긴급한 문제를 해결하기 위해 생성됩니다.
      • 긴급한 버그 수정을 진행하고, 수정이 완료되면 main과 develop 브랜치 양쪽에 병합됩니다.

    GitFlow 작업 예시

    • 어떤 프로젝트(v0.9)를 지금까지 대충 관리하다가 체계적 기능들을 추가하고 v1.0 버전으로 출시하려고 합니다. 이럴 경우 GitFlow에서는 어떤 식으로 브랜치가 관리되게 될까요?
      • 1. 먼저 develop 브랜치를 생성
        • develop 브랜치를 생성하는 이유는 신기능을 개발하고 바로 main 브랜치에 합치면 안 되기 때문입니다. 어떤 오류가 있을지 모르기 때문에 개발이 되고 나면 develop 브랜치에서 release 브랜치로 분기한 뒤 여러 테스트를 거치고 나서야 main 브랜치에 병합이 진행됩니다.
        • 모든 개발은 develop 브랜치에서 진행됩니다.
      • 2. 신기능 개발은 feature 브랜치에서 진행합니다.
        • 신기능을 만들고 싶으면 develop 브랜치를 복사한 feature 브랜치에서 각각 개발합니다.
          • feature/login 브랜치, feature/buy 브랜치 등 기능을 나타내는 이름을 /를 통해 나타낼 수 있습니다.
        • 완성되면 develop 브랜치에 merge를 진행하게 됩니다. (중요한 내용이 아니면 squash and merge도 괜찮습니다.)
      • 3. 신버전 출신 준비를 위해 release 브랜치를 생성
        • develop에서 만든 2개 기능을 바로 main에 합치지 않고 develop → release 브랜치로 프로젝트를 복사한 다음 출시준비를 합니다.
        • 여기서 릴리스 준비를 위한 최종 버그 수정, 문서 작업 등을 수행합니다.
        • relases/1.0 이런 식으로 브랜치 이름을 짓는 경우가 많습니다.
        • 완성되면 main 브랜치로 merge를 진행합니다.(유저에게 배포) 또한 개발은 계속 진행되어야 하기 때문에 완성본은 develop 브랜치에도 merge를 진행해야 합니다.
      • 4. 급한 버그 수정은 hotfix 브랜치 생성
        • 배포한 버전에서 심각한 오류가 발생했습니다. 이런 급한 오류들은 main 브랜치에서 hofix브랜치 하나를 만들어서 바로바로 버그를 수정합니다.
        • 수정이 완료되면 main 브랜치와 develop 브랜치에 merge를 진행합니다.
    • 전체 그림

    참고