Git - Branch

iseon_u·2022년 6월 25일
0

Git

목록 보기
4/5
post-thumbnail

Branch 브랜치 전략


  • 여러 개발자가 협업하는 환경에서 한 개의 git 저장소를 효과적으로 활용하기 위한 work-flow
  • 브랜치의 생성, 삭제, 병합이 자유로운 git의 유연한 구조를 활용하여 다양한 방식으로 소스 관리를 할 수 있다.

자주 쓰이는 브랜치 전략

  1. git-flow: 5가지의 브랜치를 이용해 운영하는 브랜치 전략
  2. github-flow: main 브랜치와 Pull Request 를 활용한 단순한 브랜치 전략

git-flow

  • 많은 기업에서 표준으로 사용하는 브랜치 전략
  • 항상 유지되는 2개의 메인 브랜치와 역할을 완료하면 사라지는 3개의 보조 브랜치로 구성
  • 메인 브랜치: 항상 유지됩니다.
    • main: 제품으로 배포할 수 있는 브랜치
    • develop: 개발자들이 개발하는 브랜치
  • 보조 브랜치: merge 되면 사라집니다. 사용을 마치면 브랜치 삭제
    • feature: 기능을 개발하는 브랜치
    • release: 이번 출시 버전을 준비하는 브랜치
    • hotfix: 출시 버전에서 발생한 버그를 수정하는 브랜치

Feature 브랜치

  • 브랜치가 분기되는 곳: develop
  • 브랜치가 머지 되는 곳: develop
  • 이름: master, develop, release-, hotfix- 를 제외한 이름 가능
  • feature 브랜치는 하나의 새로운 기능을 만들 때 생성
  • develop 에 merge 후에는 삭제
  • merge 할 때는 —no-ff 를 사용하여 기록을 그룹화

—no-ff

  • 브랜치 전략에서 merge 를 할 때 사용하는 것을 권장
  • Fast-forward 관계에 있어도 Merge commit 을 생성하여 해당 브랜치가 존재하였다는 정보를 남길 수 있다.
  • commit 기록을 돌리기 편해진다.
  • 사용하지 않으면 브랜치의 존재 여부를 몰라 어떤 commit 부터 해당 기능을 구현 했는지 확인하기 어렵다.

Release 브랜치

  • 브랜치가 분기되는 곳: develop
  • 브랜치가 머지 되는 곳: develop & master
  • 이름: release-*
  • 다음 버전 출시를 위해 QA를 진행하는 브랜치
  • 버그 수정 및 버전 번호, 빌드 날짜와 같은 메타 데이터를 준비하며 기능 개발은 금지 된다.
  • merge 할 때는 -no-ff 를 사용하여 기록을 그룹화
  • master로 merge 후에는 tag 명령어를 통해 버전을 명시

Hotfix 브랜치

  • 브랜치가 분기되는 곳: master
  • 브랜치가 머지 되는 곳: develop & master
  • 이름: hotfix-*
  • 제품 (master) 에 버그가 발생하면 빠른 수정을 위해 생성하는 브랜치
  • 제품 (master) 코드를 수정하는 중에도 develop 에서는 계속 개발을 할 수 있다는 장점이 있다.
  • master 로 merge 후에는 tag 명령을 통해 이전 버전보다 높은 버전을 명시

git-flow 개발 프로세스

  1. 개발자는 develop 브랜치로부터 본인이 개발할 기능을 위한 feature 브랜치를 만듭니다.
  2. feature 브랜치에서 기능을 만들다가, 기능이 완성되면 develop 브랜치에 merge 합니다.
  3. 이번 배포 버전의 기능들이 develop 브랜치에 모두 merge 됬다면, QA 를 위해 release 브랜치를 생성합니다.
  4. release 브랜치에서 오류가 발생한다면 release 브랜치 내에서 수정합니다. 마침내 QA 가 끝났다면, 해당 버전을 배포하기 위해 main 브랜치로 merge 합니다. bugfix 가 있었다면 해당 내용을 반영하기 위해 develop 브랜치에도 merge 합니다.
  5. 만약 제품 (main) 에서 버그가 발생한다면, hotfix 브랜치를 만듭니다.
  6. hotfix 브랜치에서 버그 픽스가 끝나면, develop 과 master 브랜치에 각각 merge 합니다.

git-flow 특징

  • 주기적으로 배포를 하는 서비스에 적합
  • 가장 유명한 전략, 많은 IDE가 지원한다.

github-flow

  • github 에서 만든 단순한 구조의 브랜치 전략
  • 제품이 릴리즈 되는 최신 버전인 main 브랜치만이 존재

github-flow 개발 프로세스

  1. 브랜치 생성
    • 기능 개발, 버그 픽스, 혹은 어떠한 이유로든 main 으로부터 branch 를 생성
    • git-flow 처럼 체계적 분류가 없기 때문에 브랜치 의도가 잘 들어나게 이름 작성
  2. 기능 개발, 버그 수정
    • 작업을 하며 기능별로 commit
    • commit 메시지는 정확하고 간결하게 작성해야한다.
    • commit 은 서버의 동일한 브랜치에 push 해줘야 한다.
  3. Pull Request 생성
    • 기능 또는 오류 수정이 완료되었으면 main 브랜치에 PR 을 보낸다.
  4. 리뷰와 논의
    • PR을 통해 팀원과 작성한 코드에 대한 리뷰와 논의를 한다.
  5. 공개 및 테스트
    • Github 에서는 main 에 합치기 전에 브랜치에서 코드를 공개 및 테스트 가능
    • PR 상의와 테스트가 끝난 경우 (테스트 버전으로) 공개할 수 있다.
    • 오류가 발생할 경우 원래의 main 브랜치를 다시 배포하여 roll back 한다.
  6. 합치기 Merge
    • 브랜치의 검증이 완료되면 메인 브랜치에 합친다.
    • 배포 자동화를 이용해 즉시 배포

github-flow 특징

  • 브랜치 전략이 단순하여 git을 처음 접하는 사람에게도 유용
  • CI (지속적 통합), CD (지속적 배포) 가 자연스럽게 이루어진다.
🤔 “모든 상황에 완벽한 해법은 존재하지 않습니다. 스스로의 상황을 고려하고, 미워하지 말고, 스스로 결정하세요!”
profile
🧑🏻‍💻 Hello World!

0개의 댓글