mvc패턴이 있듯이 git branch운영에 많이 사용되는 방법론이다.
즉, 브랜치 생성에 규칙을 만들어서 협업을 유연하게 하는 전략이다.
제품으로 출시될 수 있는 브랜치
즉, 배포 가능한 상태만 관리한다. 커밋할 때에는 태그를 사용하여 배포번호를 기록한다.
앞에서 설명한 통합 브랜치
를 뜻한다.
다음 출시 버전을 개발하는 브랜치
기능 개발을 위한 브랜치들을 병합하기 위해 사용. 즉, 모든 기능이 추가되고 버그가 수정되어 배포 가능한 안정적인 상태라면 develop 브랜치를 ‘master’ 브랜치에 병합(merge)한다.
평소에는 이 브랜치를 기반으로 개발을 진행한다.
앞에서 설명한 토픽 브랜치
를 뜻한다.
기능을 개발하는 브랜치
feature 브랜치는 새로운 기능 개발 및 버그 수정이 필요할 때마다 develop
브랜치로부터 분기한다.
feature 브랜치에서의 작업은 기본적으로 공유할 필요가 없기 때문에, 자신의 로컬 저장소에서 관리한다.
개발이 완료되면 ‘develop’ 브랜치로 병합(merge)하여 다른 사람들과 공유한다.
배포 버전을 준비하는 브랜치
develop
브랜치에서 배포할 수준의 기능 개발이 완료되면, develop
에서 release
브랜치를 분기한다.release
브랜치에서는 배포를 위한 "버그 수정, 문서 추가"등 release와 직접적으로 관련된 작업만 수행한다.release
브랜치에서 배포 가능한 상태가 되면 master
브랜치에 병합된다. 또한 develop
브랜치에도 병합 적용해 주어야 한다.[release branch 장점]
배포를 위한 전용 브랜치를 사용함으로써 한 팀이 해당 배포를 준비하는 동안 다른 팀은 다음 배포를 위한 기능 개발을 계속할 수 있다. 즉, 딱딱 끊어지는 개발 단계를 정의하기에 좋다.
예를 들어, 이번 주에 버전 1.3 배포를 목표로 한다!
라고 팀 구성원들과 쉽게 소통하고 합의할 수 있다.
[릴리즈 과정 예]
git checkout -b release-1.2 develop
배포 사이클 종료
git checkout master
git merge --no-ff release-1.2
--no-ff
옵션 설명 참고git tag -a 1.2
git checkout develop
git merge --no-ff release-1.2
git branch -d release-1.2
[--no-ff
옵션]
develop
브랜치에 merge한다.feature
브랜치에 존재하는 커밋 이력을 모두 통합하여 하나의 커밋 객체를 만들어 develop
브랜치에 병합하는 것이다.[release 브랜치 네이밍]
release-RB_*
,release-*
,release/*
처럼 짓는 것이 일반적release-*
추천배포 버전에서 발생한 버그를 수정 하는 브랜치
배포한 버전에서 긴급하게 수정을 해야 할 필요가 있을 경우, master
브랜치에서 분기하는 브랜치다.
develop
브랜치에서 문제가 되는 부분을 수정하여 배포 가능한 버전을 만들기에는 시간도 많이 소요되고 안정성을 보장하기 어렵다. 그래서 바로 배포가 가능한 master
브랜치에서 직접 브랜치를 만들어 필요한 부분만 수정한 후 다시 master
브랜치에 병합하여 이를 배포한다.
관례적으로 브랜치 이름 앞에 "hotfix-"를 붙인다.
정리하자면, release는 develop
에서 분기한 임시 브랜치이고, hotfix는 master
에서 분기한 임시 브랜치이며 release 이후에 생성된 브랜치이다. 활용하는 방법은 동일하다.
참고 : https://nvie.com/posts/a-successful-git-branching-model/
feature
,develop
에서develop
,release
,master
에서develop
,hotfix
,master
에서