이유현
git branch 전략 그게 뭔가요...? Git flow 탐구하기
서론
안녕하세요, 저는 IT 협업 동아리 PARD에서 iOS파트 4기로 활동하고 있는 이유현이라고 합니다.
지난 2기, 3기를 웹 파트로서 PARD를 참여하며 이번 4기에도 IOS라는 새로운 파트에 도전하게 되면서 벌써 3주간 기획,디자인, 개발이 모여 프로젝트를 만드는 롱커톤을 앞두게 되었습니다.
롱커톤을 앞두고 개발자들끼리 협업을 어떻게 해야할지 정말 고민이 많으실텐데요, 저도 지난 롱커톤을 겪어오면서 개발자들끼리의(특히 프론트는 3명이라 더더욱) 협업이 무척 중요하다는 것을 느낄 수 있었습니다.
그래서 이번에 개발자들끼리의 협업할 때 도움이 되는 git branch 전략에 대해 알려드리고 합니다! (또 마침 제가 지난 3기 때 쓰려고 정리해둔 git flow에 대한 정리가 있더라구요 ㅎㅎ)
본론
지금 소개드리는 방식은 git branch 전략으로 유명한 git flow입니다.
Git flow란 5가지 종류의 브랜치가 존재합니다.
브랜치명 | 설명 | 비고 |
|---|---|---|
main | 서비스를 직접 배포하는 역할 | 필수(기본) |
feature | 각 기능 별 개발 브랜치 | feature/(기능요약) - 팀원들이 만듦 |
ex) feature/login | ||
develop | feature에서 개발된 내용을 가지고 있는 브랜치(여기로 pr날리고, pull 함) | 필수(기본) |
release | 배포하기 전 내용을 QA하기 위한 브랜치 | |
hotfix | main브랜치로 배포한 후 버그가 생겼을 때 빨리 고치기 위한 브랜치 |
main 브랜치에서 병합하던 것을 develop 브랜치에서 대신 작업한다고 생각하시면 됩니다
main은 뭐 하느냐? 배포할 때 보여지는 최종 결과물입니다
git flow 사용하기
git flow를 사용하는 두 가지 방법에 대해 설명해드리겠습니다!
첫 번째는 별 다른 설치없이 git 명령어로만 하는 경우
두 번째는 git flow를 지원해주는 도구를 설치해 사용하는 경우 입니다
1. git flow(설치X)
1. main과 develop 브랜치를 만든다.
→ 원격저장소와 연결한다
2. 레파지토리에서 develop 브랜치를 default로 만든다.
(레파지토리 → settings → General → Default branch 변경 )
3. 각자 로컬에서 feature/(기능요약) 브랜치 만들기
→ `git switch -c feature/login develop`
: develop 브랜치를 참고하여 만들고 만든 브랜치로 바로 이동
: develop 브랜치에서 브랜치를 생성한다면 develop을 적을 필요는 없음
4. 작업 후 깃 커밋
5. `git push origin feature/login`
→ 원격저장소에 브랜치 추가하고 pr 까지 날림
6. 레포 들어가서 pr 작성
7. 다른 사람이 pr 날렸을 때
→ `git switch develop` → `git pull`
7-1. 내 브랜치에 머지하고 싶을 때 -> (내 작업 브랜치에서)'git merge develop'
8. `git branch -d feature/get`
→ 작업 다한 로컬 브랜치 삭제,
`git push origin --delete feature/login`
→ 작업 다한 원격 브랜치 삭제(동일 브랜치임)
9. !!!3번부터!!! 다시 반복
2. git flow(설치 O)
git flow 도구 사이트
MacOS 기준
1.`$ port install git-flow-avh` 혹은 '$ brew install git-flow-avh' 2. 깃으로 관리하고 있는 경로에 `git flow init` 3-1. 새기능 시작하기 deveop 브랜치에서 `git flow feature start (기능요약)` -> 이런식으로 하면 feature/(기능요약) 브랜치가 만들어짐 -> 자동으로 해당 기능 브랜치로 전환됨 3-2. 기능 완료 `git flow feature finish (기능요약)` -> 해당 기능 브랜치를 develop 브랜치에 머지함 -> 기능 브랜치를 삭제함 -> develop 브랜치로 전환됨 **기능을 공동으로 만들고 있을 경우 **1. 기능을 게시 `git flow feature publish (기능요약)` -> 내 로컬에 있는 기능을 원격저장소에 게시 **2. 원격저장소에 게시된 기능을 가져오기 `git flow feature pull origin (기능요약)` 4-1. release 시작 develop 브랜치에서 `git flow release start RELEASE [BASE]` -> release 브랜치 생성 -> [BASE]에 release할 커밋 해시를 넣을 수도 있음 4-2. release 허용 'git fow release publish RELEASE' -> 다른 개발자들의 release commit을 허용하는 것 -> 'git flow release track RELEASE' 원격 'release' 브랜치 변경 추적 4-3. release 완료 'git flow release finish RELEASE' -> 'release'브랜치를 'master' 브랜치에 병합 -> 릴리스를 릴리스 이름의 태그 -> 릴리스를 'develop' 브랜치로 재병합 -> 'release' 브랜치 삭제 * 'git push --tags'를 사용해 태그들을 push해야함!
결론
사실 저는 git flow 도구보다 git 명령어로 하는게 더 익숙해 2번 보다는 1번을 더 많이 사용하긴 합니다ㅎㅎ
그렇지만, 여러분들은 팀원들과 상의해보면서 더 좋은 방법을 찾길 바랍니다.
또한, 개발자들 간의 협업을 처음 경험하는 분들도 있으실텐데 부디 도움이 되길 바라며, 적절한 브랜치 전략과 컨벤션으로 좋은 협업을 이루시길 바라겠습니다. 감사합니다!