😎 Git 브랜치를 효과적으로 나누고, 관리하기
대표적인 브랜칭(branching) 전략
📃Git-flow
Git-flow는 브랜치를 크게 4가지로 나누어 개발하는 전략입니다.
가장 중심이 되는 브랜치는 master와 develop 브랜치이며,
merge된 feature, release, hotfix 브랜치는 삭제하도록합니다.
Git-flow 전략은 주기적으로 배포를 해야하는 프로젝트에는 적합하지만,
브랜치가 많아 복잡하고 어떤 프로젝트에 따라서는 몇몇 브랜치가 애매한 포지션을 가질 수 있습니다.
메인 브랜치(Main branch)
master 브랜치와 develop 브랜치, 이 두 종류의 브랜치를 보통 메인 브랜치로 사용합니다.
master 브랜치와 develop 브랜치를 병행으로 유지합니다.
master
develop
보조 브랜치(Supporting branch)
피처 브랜치(feature branch) 또는 토픽 브랜치(topic branch)
갈라져 나온 브랜치 : develop 다시 merge할 브랜치 : develop 브랜치 이름 규칙 : master, develop, release-*, hotfix-*를 제외한 것 |
💡 develop 브랜치와 feature 브랜치
|
릴리즈 브랜치(release branch)
갈라져 나온 브랜치 : develop 다시 merge할 브랜치 : develop, master 브랜치 이름 규칙 : release-* |
핫픽스 브랜치(hotfix branch)
갈라져 나온 브랜치 : master 다시 merge할 브랜치 : develop, master 브랜치 이름 규칙 : hotfix-* |
📃Github-flow
Git-flow가 Github에서 사용하기에는 복잡하다고 나온 브랜칭 전략입니다, 흐름이 단순한 만큼 role도 단순합니다. master 브랜치에 대한 role만 정확하다면 나머지 브랜치들에 대해서는 관여하지 않습니다. 즉, hotfix 브랜치나 feature 브랜치를 구분하지 않습니다. 다만 우선순위가 다를 뿐입니다. pull request 기능을 사용하도록 권장합니다.
이 브랜칭 전략은 수시로 배포가 일어나며, CI와 배포가 자동화되어있는 프로젝트에 유용합니다.
사용법
1. master 브랜치는 어떤 때든 배포가 가능하다
2. master에서 새로운일을 시작하기 위해 브랜치를 만든다면, 이름을 명확히 작성하자
3. 원격지 브랜치로 수시로 push 하자
4. 피드백이나 도움이 필요할 때, 그리고 merge 준비가 완료되었을 때는 pull request를 생성한다
5. 기능에 대한 리뷰와 논의가 끝난 후 master로 merge한다
6. master로 merge되고 push 되었을 때는, 즉시 배포되어야한다
🤔 어떤 브랜칭 전략을 사용해야할까?
배달의 민족을 개발하는 우아한 형제들이 GitHub-flow를 사용하다 Git-flow로 브랜치 전략을 바꿨다는 글을 접했습니다. 이렇듯 브랜칭과 배포에 대한 전략을 상황에 따라 바뀔 수 있습니다.
조직의 규모, 서비스의 특징, 프로젝트에 참여하고 있는 구성원들이 제각기 다르기 때문입니다.
따라서 개발팀은 협의를 통해 브랜칭과 배포에 대한 전략을 결정하고 운영해야하며, 이 전략은 공유되어 구성원들이 학습-체득화할 수 있는 것이 중요하다는 결론을 내릴 수 있습니다.
✏️ 참고 배달의 민족, 우아한 형제들 ‘우린 Git Flow를 사용하고 있어요‘ http://woowabros.github.io/experience/2017/10/30/baemin-mobile-git-branch-strategy.html ‘상시배포에는 Git-flow가 적합하지 않다?’에 대한 토론 https://www.slipp.net/questions/244 git-flow, github-flow, gitlab-flow https://ujuc.github.io/2015/12/16/git-flow-github-flow-gitlab-flow/ |
Big endian과 little endian (0) | 2023.07.26 |
---|---|
Subversion(SVN) 개념 및 명령어 정리 (0) | 2022.06.09 |
오픈소스 프로그래밍 언어 정리 (0) | 2021.11.23 |
젠킨스(Jenkins) 설치 및 설정 (0) | 2021.11.19 |
[정보처리기사] 소프트웨어 개발 방법론 (0) | 2021.07.31 |