GIT
소규모 팀의 협업을 위한 git + github workflow
양찬우
2021. 10. 20. 18:06
728x90
현재 진행 중인 프로젝트에서 프론트엔드 담당으로 참여 중이다. 합류 초기 협업을 위한 Git workflow가 설정되어 있지 않다는 것을 확인하고 원만한 협업을 위해 git workflow 문서를 작성했다. 기본 골자는 처음 팀 프로젝트를 시작했을 때부터 참고했던 우아한 형제들 기술 블로그의 git-flow에서 가져왔으며, 이후 몇 달 간의 실제 프로젝트 진행 후 문서를 보완해야 한다고 느껴서 몇 가지 규칙을 현 상황에 맞춰 수정 및 보완했다.
현재 우리 팀의 상황은 아래와 같다.
- 팀원 수가 2~10명 이하인 소규모 팀
- JIRA 등 다른 협업용 툴을 사용하지 않거나 엄격히 활용하지 않음
- Git에 익숙하지 않은 팀원이 다수 존재
- 개발 초기라서 잦은 배포가 필요함
- Git + Github 원격 저장소 사용
- PR, 리뷰, 이슈, 댓글 등 알림을 SLACK 연동하여 사용
- 개발문서 정리, 진행상황 확인용 칸반 차트, 일정관리 용으로 Notion 사용
만약 위와 비슷한 상황에서 하나의 git workflow가 없다면, 이 문서를 참고해서 협업 규칙을 정하는 것도 도움이 될 것 같다.
브랜치 정의
- main: 제품으로 출시될 수 있는 브랜치
- develop : 다음 출시 버전을 개발하는 브랜치
- feature : 기능을 개발하는 브랜치
- release : 이번 출시 버전을 준비하는 브랜치
- hotfix : 출시 버전에서 발생한 버그를 수정 하는 브랜치
브랜치 사용규칙
- 하나의 기능은 되도록 하나의 커밋으로 합니다.
- 커밋 그래프는 최대한 단순하게 가져갑니다.
- 서로 공유하는 브랜치의 커밋 그래프는 함부로 변경하지 않습니다.
- 리뷰어에게 꼭 리뷰를 받습니다.
- 자신의 Pull Request는 스스로 merge 합니다.
브랜치 생성규칙
* 주의, <특정이름> 브랜치가 있다면 <특정이름>/<추가> 브랜치를 생성할 수 없다. 예를 들어 Release 브랜치가 원격저장소에 존재한다면, Release/0.1.1 브랜치를 생성할 수 없다. 하위 브랜치가 필요한 경우 (ex, feature,release,hotfix 등) 상위 브랜치 명만으로 브랜치를 생성하면 안된다.
- main → 하나의 master(main) 브랜치만 사용, 배포 시 Tag 및 업데이트 내용 추가 작성, 추가 생성하지 않는다.
- develop → 하나의 develop 브랜치만 사용, 추가 생성하지 않는다.
- release → 배포 버전 명으로 생성 (ex,release_1.3 ), 해당 버전 배포 전까지만 사용
- feature → 해당 feature 업무 담당자가 최신 버전의 develop에서 feature/<기능명>으로 생성
- hotfix → hotfix/<내용>으로 생성
커밋 메세지 규칙
- 유의미한 코드 단위 / 기능 완료 시에 커밋
- 커밋 메세지 작성 예시
$ git commit -m "Add facebook Oauth
- 페이스북 API 연결 파일 작성
- 헤더 로그인 모달 및 메인 로그인 옵션에 추가
"
- 첫 줄에 커밋 제목 작성, 추가 설명이 필요한 경우 줄 바꿈 후 여러 줄에 내역 작성
- 커밋 메세지 첫 시작은 아래 5단어 (첫 글자 대문자)
- Fix : 버그 수정, 에러 해결 등
- Add : 파일 추가 / 기능 및 함수 추가
- Delete : 파일 삭제
- Refactor : 기존 파일 개선/보완
- Move : 파일 위치 변경 / 이름 변경 등 실제 코드 내용 변경 없을 시
상황 별 Git 조작 순서 및 방법
git에 익숙하지 않은 팀원들을 위해 작성한 git command 및 조작 방법이다.
- 새로운 feature 개발: 최신 develop의 변경사항을 local에 반영시킨 후, 새로운 브랜치를 생성하여 작업한다.
- $ git checkout develop : develop 브랜치로 checkout
- $ git pull : develop 브랜치의 최신 변경사항을 로컬로 가져온다.
- $ git checkout -b <feature branch 명> :명령어를 통해 브랜치 생성 후 checkout한다
- 코드작성
- $ git add <file 명>: git add . 를 통해 모든 파일을 staging area에 추가할 수 있다.
- $ git commit -m "커밋메세지"
- $ git push origin <feature branch>: origin(원격 저장소)의 feature branch로 로컬 변경 내역을 push
- github에서 develop branch <- feature branch 방향으로 Pull Request 진행
- 리뷰가 종료되고 모두 Approve 된다면 Merge한다.
- 배포 후 hotfix가 필요할 때
- $ git checkout main : 현재 배포 중인 main 브랜치로 이동
- $ git checkout -b <hotfix branch> : 핫픽스 브랜치 생성
- hotfix, 수정 코드 작성
- $ git add <file 명>: git add . 를 통해 모든 파일을 staging area에 추가할 수 있다.
- $ git commit -m "커밋메세지"
- $ git push origin <hotfix branch>
- github에서 develop branch <- hotfix branch 방향으로 Pull Request
- github에서 main branch <- hotfix branch 방향으로 Pull Request
- 각각 main과 develop으로의 PR 리뷰가 완료되면 Merge한다.
- release 준비
- 원격 저장소의 develop 브랜치에 이번 버전에 업데이트할 모든 feature가 머지되었는지 확인
- $ git checkout develop : 로컬 develop 브랜치 이동
- $ git pull : 원격 저장소의 변경사항을 로컬로 가져온다.
- $ git checkout -b <release branch> : release 브랜치 생성
- release 브랜치에서 빌드 후 버그 유무 확인
- 버그 확인 시 bugfix 후 add, commit, push -> develop브랜치에 PR
- $ git push origin <release branch>
- github에서 main branch <- release branch 방향으로 Pull Request
- github에서 develop branch <- release branch 방향으로 Pull Request
- 리뷰가 완료되면 배포사항을 Merge한다.
728x90