브랜치
브랜치를 사용하는 이유는 무엇일까
브랜치를 사용하지 않고 메인 브랜치에서만 작업하면 어떤 일이 벌어질까
하나의 기능을 개발하기 위해 여러개의 커밋을 하게 된다면 기능이 완성되기 전까지 메인 브랜치의 소스코드는 불완전한 상태로 존재할 것이다.
협업을 하게 됐을 때, 오직 메인 브랜치에서만 작업을 한다면 내가 작업중인 파일을 누군가 건드릴 수 있게 된다.
또한 여러 기능을 개발하면서 남겨진 커밋 히스토리가 메인 브랜치에 뒤죽박죽 섞이게 될 것이다.
브랜치를 사용하게 된다면, 다른 브랜치에 영향을 받지 않는 독립적인 환경에서 기능을 개발하거나, 버그를 수정할 수 있다. 즉, 여러 기능을 여러 사람이 병렬적으로 개발할 수 있게 된다.
기능을 개발할 때 브랜치를 생성하고, 코드를 작성하며 커밋을 남긴다.
이후 기능 개발이 완료된 경우에 메인 브랜치에 머지를 하면 안전하게 기능을 개발할 수 있다.
이런 브랜치를 사용하여 새로운 기능을 개발하다가 기획이 변경되어 기능이 필요 없어졌을 때도 간단하게 브랜치만 삭제하면 된다.
Github Flow
Github Flow는 이름 그대로 github 환경에서 사용하기 적합한 브랜치 전략이다.
또한 자동화를 활용할 수 있다.
main 브랜치
항상 안정적인 상태어야 한다.
main의 모든 커밋은 언제 배포하든 문제 없어야하고, 언제든 브랜치를 새로 만들어도 문제가 없어야한다.
main 브랜치의 모든 커밋은 빌드가 되고, 테스트를 통과해야한다.
Topic 브랜치
새로운 기능을 개발할 때에는 Topic 브랜치를 main 브랜치로부터 생성한다.
Git flow의 feature 브랜치와 동일한 역할이다.
또한 별도로 hotfix 브랜치를 관리하지 않으며, 버그 수정을 진행한다.
topic 브랜치의 커밋은 기능이 완성되지 않았더라도 꾸준히 push한다.
꾸준히 push 해주는 이유는 구성원 모두가 끊임없이 의사소통 할 수 있게 해준다.
github에서는 PR(Pull Request)라는 유용한 기능이 존재한다.
개발자는 기능을 개발하는 중 언제든 상관없이 PR을 개설할 수 있다.
심지어 코드의 변경이 없더라도 아이디어를 공유하고 싶을 때에도 PR을 개설한다.
개발자들은 개설된 PR에서 토론을 하고, 코드의 특정 라인을 선택해 코멘트를 남겨 코드리뷰를 주고 받곤 한다.
토론과 리뷰가 끝났으면 다른 사람들의 동의를 얻고 main 브랜치에 자신의 topic 브랜치를 머지한다.
이때 자동화된 CI 빌드를 통과해야 머지가 가능하다.
Branch strategy
branch Name 설명
main | 초기 세팅 |
develop | 로컬 develop merge 브랜치 |
restaurant/review | 기능 개발 |
Git workflow
- local - feature에서 각자 기능 작업
- 작업 완료 후 local - develop에 PR 후 merge
- 이후 remote - develop으로 PR
- 서로의 코드 리뷰 후 Confirm 받고 Merge
- remote - develop에 merge될 때 마다 모든 팀원 remote - develop pull 받기
Commit Convention
- type : subject
- 과거 시제 사용하지 않고 명령어로 작성한다.
feat | 새로운 기능 추가 |
fix | 버그 수정 |
!BREAKING CHANGE | api 변경이 큰 경우 (Controller router 변경 등) |
!HOTFIX | 급하게 치명적인 버그를 고쳐야 하는 경우 |
docs | 문서 수정 (README file) |
style | 코드 포매팅, 세미콜론 누락, 코드 변경이 없는 경우 |
comment | 필요한 주석 추가 및 변경 |
refactor | 코드 리팩토링 |
rename | 파일 혹은 폴더명 수정 또는 옮기는 작업 |
remove | 파일 삭제하는 작업만 수행한 경우 |
test | 테스트 코드, 리팩토링 테스트 코드 추가 |
chore | 빌드 업무 수정, 패키지 매니저 수정 |
커밋 컨벤션은 아래 링크에 자세하게 나와있으니 참고해야겠다.
'Github' 카테고리의 다른 글
Git - git config --global 설정 [초기 세팅] (0) | 2024.12.06 |
---|---|
Git - branch 명령어 정리 (0) | 2024.07.31 |