Branch
Git 과 Github의 브랜치전략 차이에대해 알아야 한다.
Git Flows
Git Flow 는 로컬중심 브랜치전략이다.
일반적으로 사용되는 브랜치는 main(master), develop, release, feature, hotfix 등이 있다.
main(master)
배포의 기준이되는 브랜치로 , Release Tag를 기록한다.
배포용이기 때문에 main에 직접 커밋하거나 머지하면 안되지만 예외적으로 hotfix 브랜치는 main에 바로 머지할수도 있다.develop
개발이 이뤄지는 브랜치로 동시에 작업하게되면 conflict가 발생할 수 있다.
그래서 실제로는 feature브랜치에서 작업 후 develop 에 머지하는 방식으로 개발프로세스가 진행된다.release
실제 배포를 하기위해 준비하는 브랜치로 develop 브랜치에서 다음 릴리즈를 위한 개발이 끝나면 여기로 분기하여 버그픽스와 리팩토링을 진행한다.
배포준비가 완료되면 그떄 main 브랜치로 머지한다.hotfix
배포가 완료된 main 브랜치에서 심각한 버그가 발생했을 때 사용하는 브랜치다.
기본적으로 main에는 직접 커밋을 할 수 없으므로 핫픽스 브랜치에서 문제를 해결 후 main,develop에 머지한다.feature
개발 작업의 중심이 되는건 develop이지만, 실제 기능을 구현하는 브랜치는 feature다.
이슈에 등록된 기능을 구현하거나 버그픽스,리팩토링 작업을 develop에서 분기된 feature에서 작업 후 머지한다.
Github Flows
Github Flow 는 remote 중심 브랜치전략이다.
중심이되는 main 브랜치와 각각의 feature 브랜치로 구성된다.
Git flow와 비교하면 main은 main,develop,release / feature는 feature,hotfix가 합쳐진 형태라고 보면 된다.
작업한 내용을 수시로 remote로 push 하여 항상 최신상태를 유지한다. 이 부분이 리모트중심 브랜치전략의 핵심이다.
develop이나 release 브랜치처럼 배포준비를 위한 브랜치가 따로 없기 때문에 main 브랜치에 머지하는 작업을 엄격하게 관리해야 한다.
Commit
커밋시에 커밋컨벤션에 따라 커밋메세지를 남겨야 협업과 유지보수가 원활해진다.
Git 에서 공부했던 커밋메세지와 거의 동일하지만, 만약 혼자 공부하거나 정리하는 목적이라면 한글로 정리한내용이 무엇인지 한줄로 적는것도 좋다.
기본적으로 header, body, footer를 선택적으로 작성하지만 footer는 꼭 작성하는것을 추천한다.
Header
커밋로그의 제목을 나타내는 부분으로 50자를 넘기지않고 대문자로 작성하며, 마침표도 붙이지 않는다.
일반적으로 Header에는 Tag를 붙이며 Tag에는 새로운기능(feat), 리팩토링(refactor), 버그수정(fix), style(코드포맷팅,주석처리), chore(빌드수정, 패키지관리자수정) 등 을 사용한다.
Body
작업에대한 상세기록을 나타내는 본문으로 특별한 format은 없고 헤더와 한칸 공백을 만드는것이 좋다.
72자를 넘지않게하며 Header에서 한줄로 설명가능하다면, 굳이 Body를 작성하지 않아도 된다.
Footer
Footer 는 해당 작업과 관련된 이슈의 Tag가 붙는다.
이슈Tag를 추가하면 Github에서 자동으로 해당태크를 인식하여 이슈와 관련된 커밋을 연결해준다.
이슈Tag 는 #{이슈번호} 로 적는다.
Issue
개발의 작업이되는 작은 단위
작업의 히스토리를 관리하기 위해 작성하는것이 좋다. 이슈도 커밋컨벤션과 비슷하게 제목의 맨 앞에 Tag를 붙인다.
작업 할 내용이 있다면 이슈로 내용을 등록하고 그 이슈에 맞는 feature브랜치를 생성해 작업을 생성한다.
이때 feature 브랜치명에 이슈태그를 붙이면 로컬에서 브랜치를 식별하기 편하다.
(feat-3 의 브랜치명은 3번이슈를 해결하는 브랜치라는것을 쉽게 알 수 있다.)
Issue Template
이슈에는 왜 이 작업을 해야하는지, 어떤 작업을하는지, 관련된 다른 이슈는 없는지를 기록한다.
이 내용을 매번 작성하기에는 생산성이 떨어지므로 이슈템플릿을 사용한다.
깃헙 레포설정에서 Features에 issues-> Set up templates를 선택하면 이슈를 등록 할 수 있다.
(실제 프로젝트의 .github 경로에 추가됨)
Feature/ Bug /Custom 기본 템플릿이 존재하며 이것을 기반으로 수정해서 작성도 가능하다.
Issue Tag, Label, Assignee를 설정 하고 커밋 형태로 이슈를 추가한다.
보통 왜 해야하는지 ## background , 뭘 할건지 ## To do 체크박스리스트 형태로 작성한다.
처음엔 번거롭지만 Tag나 Label을 깔끔하게 작성하는것이 매우 중요하다.
Pull request
머지 작업을 진행하기 전 팀원에게 코드를 받는 단계이다.
reviewr, assignee를 반드시 지정하고, 가능하다면 Label도 붙여야 한다.
PR Template
대략적인 내용(overview), 변경된 부분(change log), 리뷰어가 참고할 사항(to reviewer), 관련된 이슈(issue tag)를 기록한다.
이슈태그에 특정 키워드를 적어두면, 해당 PR이 default branch에 머지될 때 연관된 이슈가 자동으로 닫히도록 할 수 있다. (close, fix, resolve 등)
단, PR은 .github 경로에 가서 직접 md 파일을 주가해줘야 한다.
## Overview
## Change log
## To Reviewer
## Issue Tags
Closed | Fixed: #이슈번호
See also: #읽는대상
PR 체크
files chaged 에 들어가면 코드 왼편의 숫자부분에 마우스를 올려 코멘트를 남길 수 있다.
이후 코드리뷰가 마무리되면 Finish your review 버튼을 클릭해 리뷰를 끝낼 수 있다.
코드리뷰에서 approve 를 받으면 코드를 대상 브랜치로 머지할 수 있다.
이때 세가지 옵션이 있다.
- create a merge commit : 머지 커밋을 추가로 남기고 머지
- Squash and merge : 커밋로그를 하나로 합치면서 머지
- Rebase and merge : 머지 커밋을 남지기 않고 기존 커밋로그를 유지한 채로 머지
Git tag
특정 커밋에 버전을 기록할 때 사용하는 기능으로 릴리즈 버전을 기록할 때 주로 사용된다.
- Lightweight Tag : 버전만 기록하는 태그
- Annotated Tag : 태그를 생성한 유저,이메일,태그생성날짜,태그메세지를 함께 기록하는 태그
Release
생성한 태그를 기반으로 Github에서 release 버전을 기록 할 수 있다.
레포화면의 우측 Releases -> Create a new release를 클릭해 생성 한다.
여기서 원하는 버전의 태그와 태그 설명을 설정 할 수 있고 pre-release 기능으로 임시 릴리즈상태로 만들기도 가능하다.
결국 다른 사람이 이 레포를 들어왔을 때 한눈에 어떤 버전인지 알 수 있다.
Git tag 생성
Github 의 repository의 Release 에서도 편하게 생성, 설정이 가능하지만, 터미널에서도 생성,푸시하는 법을 알고있어야 한다.
- git tag <tag name> : 태그를 생성 (-a 옵션으로 Annotated 태그도 생성 가능)
- git tag : 생성된 태그 확인 (git log 로도 커밋에 태그가 등록된것을 확인할 수 있음)
- git show <tag name> : 태그 상세내용 확인
- git push origin <tag name> : 생성한 태그 깃헙에 등록
'백엔드 > Git, Github' 카테고리의 다른 글
[Git] branch merge 방법 (1) | 2022.09.22 |
---|---|
[Git] 기초와 명령어 (0) | 2022.09.22 |