git 브랜치 전략
in Git
브랜치 전략이란?
브랜치 전략이란 여러 개발자가 협업하는 환경에서 git저장소를 효과적으로 활용하기 위한 work-flow를 의미합니다.
브랜치 전략을 사용하면 브랜치의 생성, 삭제, 병합이 자유료운 git의 유연한 구조를 활용하여 다양한 방식으로 소스관리를 할 수 있습니다.
자주 쓰이는 브랜치 전략은 2가지가 있습니다.
git-flow
5가지 브랜치를 이용해 운영하는 브랜치 전략입니다.
항상 유지되는 2개의 메인 브랜치와 역할을 완료하면 사라지는 3개의 보조 브랜치로 구성됩니다ㅏ.
- 메인 브랜치 : 항상 유지됩니다.
- master : 제품으로 출시될 수 있는 브랜치
- develop : 다음 출시 버전을 개발하는 브랜치
- 보조 브랜치 : merge 되면 사라집니다.
- feature : develop 브랜치에 새로 추가할 기능을 개발하는 브랜치
- release : develop 브랜치 개발이 완료되면 출시버전을 준비하면서 QA, TEST를 위해서 사용하는 임시 브랜치
- hotfix : master 브랜치에서 발생한 버그를 수정하는 브랜치
개발 프로세스
- 개발자는 develop 브랜치로부터 본인이 개발할 기능을 위한 feature 브랜치를 만듭니다.
- feature 브랜치에서 기능을 만들다가, 기능이 완성되면 develop 브랜치에 merge합니다.
- 이번 배포 버전의 기능들이 develop브랜치에 모두 merge 됐다면, QA를 위해 release 브랜치를 생성합니다.
- release 브랜치에서 오류가 발생했다면 release 브랜치 내에서 수정합니다. QA가 끝나면, 해당 버전을 배포하기 위해 master 브랜치로 merge합니다. 만약 release 브랜치에서 bugfix가 있었다면 해당 내용을 반영하기 위해 develop 브랜치에도 merge 합니다.
- 만약 제품(master)에서 버그가 발생한다면, hotfix 브랜치를 만듭니다.
- hotfix 브랜치에서 버그 픽스가 끝나면, develop와 master 브랜치에 각각 merge 합니다.
git-flow 전략은 주기적으로 배포하는 서비스에 적합하며, 가장 유명한 전략인 만큼 많은 IDE가 지원합니다.
github-flow
master 브랜치와 pull request를 활용한 단순한 브랜치 전략입니다.
제품이 릴리즈되는 최신버전인 master브랜치만이 존재합니다.
- 기능, 개발, 버그 픽스, 혹은 어떠한 이유로든 branch를 생성합니다. git-flow처럼 체계적인 분류가 없기 때문에 브랜치 이름은 의도를 아주 잘 드러내도록 작성합니다.
- 개발을 진행하고 커밋 메시지는 상세하게 작성합니다.
- pull request를 생성합니다.
- 충분한 리뷰와 토의를 거칩니다.
- 리뷰가 끝나면 해당 내용을 실제 서버(혹은 테스트 환경)에 배포합니다.
- 이상이 없다면 master에 merge 후 push하고, 즉시 배포합니다.
github-flow는 브랜치 전략이 단순하여 git을 처음 접하는 사람에게도 유용합니다.
지속적인 통합과 배포가 자연스럽게 이뤄진다는 장점이 있습니다.
커밋 메시지 컨벤션
- feat : 새로운 기능 추가
- fix : 버그 수정
- hotfix : 급하게 치명적인 버그 수정
- docs : 문서 수정
- style : 코드 포맷팅, 세미콜론 등의 스타일 수정(코드 자체 수정 X)
- refactor : 프로덕션 코드 리팩토링
- test : 테스트 코드, 테스트 코드 리팩토링
- chore : 빌드 과정 또는 보조 기능(문서 생성 기능 등) 수정
- rename : 파일 혹은 폴더명을 수정하거나 옮기는 작업만인 경우
- remove : 파일을 삭제하는 작업만 수행한 경우
- comment : 필요한 주석 추가 및 변경
// 커밋 작성 예시
type: subject
body
footer
body와 footer은 필요할 때만 적어도 되는 옵션에 해당한다고 보면 됩니다.
feat: 압축파일 미리보기 기능 추가
사용자의 편의를 위해 압축을 풀기 전에 다음과 같이 압축파일 미리보기를 할 수 있도록함
- 마우스 오른쪽 클릭
- 윈도우 탐색기 또는 맥 파인더의 미리보기 창
closes #125
closes 대신 사용할 수 있는 키워드가 여럿 존재합니다.
- close
- closed
- fix
- fixed
이외에도 여럿 존재하는데 아무거나 사용하면 됩니다.
이슈 여러 개를 한 번에 처리할 수도 있습니다.
... 생략
close #1, close #12