브랜치 전략이란 여러 개발자가 하나의 저장소를 사용하는 환경에서 저장소를 효과적으로 활용하기 위한 work-flow이다.
브랜치 전략의 역할로서는 브랜치의 생성, 삭제, 병합 등 git의 유연한 구조를 활용해서 각 개발자들의 혼란을 줄이면서 소스를 관리를 한다.
브랜치 전략은 브랜치 생성에 규칙을 만들어서 협업을 유연하게 하는 방법론이다.
수많은 고민들로 시간을 허비할 것이다. 그래서 개발자들끼리의 협업 규칙이 필요한 것이다.
가장 널리 사용되는 2가지 브랜치 전략에 대해 알아보자
브랜치 전략의 많이 쓰이는 2가지 종류
- github-flow 전략
- git-flow 전략
단순한 구조부터 살펴보자.
Github-flow는 마스터 브랜치와 Pull request를 활용한 단순한 브랜치 전략이다.
Github-flow 전략은 기능 개발, 버그 픽스 등 어떤 이유로든 새로운 브랜치를 생성하는 것으로 시작된다.
단, 이때 체계적인 분류 없이 브랜치 하나에 의존하게 되기 때문에 브랜치 이름을 통해 의도를 명확하게 드러내는 것이 매우 중요하다.
PR이란
피드백이나 도움이 필요할 때 그리고 merge 준비가 완료되었을 때는 Pull Request를 생성한다.
- PR은 코드리뷰를 도와주는 시스템
Github flow와 다르게 크게 5가지의 브랜치를 운영하며 관리를 한다.
5가지 중, 항시 유지되는 메인 브랜치 master
, develop
2가지와 merge 되면 사라지는 보조 브랜치 feature
, release
, hotfix
3가지로 구성된다.
master
: 라이브 서버에 제품으로 출시되는 브랜치 (프로덕션)develop
: 다음 출시 버전을 대비하여 개발하는 브랜치feature
: 추가 기능 개발 브랜치 (develop 브랜치에 들어간다)
(분기되는 곳: develop, 머지하는 곳: develop, 이름 설정: master, develop, release-, hotfix-를 제외하기만 하면 자유롭게 이름 설정이 가능 )
release
: 다음 버전 출시를 준비하는 브랜치
(분기되는 곳: develop, 머지하는 곳: develop & master, 이름 설정: release-*)
hotfix
: master 브랜치에서 발생한 버그를 수정하는 브랜치
(분기되는 곳: master, 머지하는 곳: develop & master, 이름 설정: hotfix-*)
feature 브랜치를 develop 브랜치에 머지할 때는 --no-ff
를 사용하여 기록을 그룹화한다.
`--no-ff를 사용하지 않으면?
Fast-forward 관계 (rebase를 한 상태)에서 브랜치의 존재 여부를 몰라서 어떤 커밋으로부터 해당 기능을 구현했는지 확인하기 어렵다.
release 브랜치를 develop & master에 머지할 때도 --no-ff
를 사용하여 기록을 그룹화한다.
hotfix를 master 브랜치에 머지할 때 태그 명령을 통해 이전 버전보다 높은 버전을 명시한다.
ex) 2.6 -> 2.6.1
Git Flow
가 적합하다.Github flow
를 사용하는 것이 좋다.