Git Commit Convention
https://velog.io/@shin6403/Git-git-커밋-컨벤션-설정하기
이전까지 다른 프로젝트의 깃헙을 볼때 이슈관리도 잘 되고 커밋이 명료하게 잘 되어있어서 어떻게 저렇게 연결하고 작성한걸까 했는데, 방법이 있었다.
https://udacity.github.io/git-styleguide/
위 링크에 연결된 Udacity 스타일 가이드를 참조했다.
네이밍 컨벤션, 코딩 컨벤션과 같이 Commit Message를 작성할 때의 약속이라고 보면 된다.
커밋 메시지 구조는 3 단락으로 나뉜다.
type: Subject
body(optional)
footer(optional)
Type, Subject 규칙
먼저 제목의 Type에 사용할 수 있는 것들
Feat: @@
- 새로운 기능 추가Fix
- 버그 수정 또는 typoRefactor
- 리팩토링Design
- UI 디자인 변경Comment
- 필요한 주석 추가 및 변경Style
- 코드 포맷팅, 세미콜론 누락 등, 코드 변경이 없는 경우(코딩컨벤션만 맞추는 경우)Test
- 테스트 코드 추가, 수정, 삭제등 비즈니스 로직 변경이 없는경우Chore
- 위에 걸리지 않는 기타 변경사항 (자질구레한 것) (빌드스크립트 수정, image, 패키지매니저 등)Init
- 프로젝트 초기 생성Rename
- 파일 혹은 폴더명 수정하거나 옮기는 경우Remove
- 파일 삭제 작업만 수행한 경우
Subject 규칙은 다음과 같다.
- 제목은 최대 50글자
- 마침표 및 특수기호 사용X
- 첫 글자 대문자 명령문 사용
- 개조식 구문으로 작성 (간결하고 요점적인 서술)
개조식 Ex)
Fixed -> Fix,
Added -> Add,
Modified -> Modify
ex) Feat: #1 - 구분선 추가
이렇게 간단히도 괜찮은거 같다. body footer는 어짜피 optional이니까... 함축적으로 커밋하지?
Body 규칙
- 한 줄당 72자 내로 작성
- 최대한 상세히 작성
- 어떻게 보다 무엇을, 왜 변경했는지 대해 작성Footer 규칙
유형: #이슈번호
형식으로 작성- 이슈 트래커 ID 작성
- 여러개의 이슈번호는 ,로 구분
이슈 트래커 유형은 아래와 같다.
Fixes
- 이슈 수정중 (미해결 상태)Resolves
- 이슈를 해결한 경우Ref
- 참조할 이슈가 있을때 사용Reiated to
- 해당 커밋에 관련된 이슈변호 (아직 해결되지 않은 경우)
ex) Fixes: #45 Related to: #34, #23
예시
Feat: "회원 가입 기능 구현"
SMS, 이메일 중복확인 API 개발
Resolves: #123
Ref: #456
Related to: #48, #45
Git commit template 설정
XCode 에서는 템플릿을 설정해도 나오진 않지만, 터미널이나 다른 IDE 는 되는게 있으니까 정리
txt 파일을 만들어 템플릿을 작성한 후 설정해주면 된다.git config commit.template ./git-commit-template.txt
모든 프로젝트에 일괄적으로 template 적용하는 경우 --global
옵션 추가.
잘 등록되었는지 확인 git config --list
추가로 봐야할 것
[Github 협업, 이것만은 알자] - Issue & PR
이슈(Issue)란 프로젝트에서 작업해야할 단위라고 할 수 있습니다.개발해야하는 기능 발생, 수정해야할 사항 버그 발생, 리팩터링 해야하는 코드 발생 등 프로젝트에서 발생되는 작업들을 이슈로
velog.io
Close #1, Resolve #1 처럼 커밋으로 이슈를 닫는 방법은 main 브랜치(github에 설정한 default branch) 에서만 동작한다.
feature 브랜치에서는 pull request를 통해 닫는 수 밖에 없음
그래서 내 템플릿은?
Commit템플릿
간단 템플릿 예시Feat: 구분선 추가
Feat: #1 - 구분선 추가
이슈 트래킹 할때
명시적 템플릿
[이슈 키], 타입 : 제목
' 본문
' Resolve: #IssueNo
' Fix: #IssueNo
' Close: #IssueNo
' See also #IssueNo
' ----------------------------------------
' 타입 종류
' * ADD : 새로운 기능 추가
' * MODIFY : 기존 기능 수정
' * FIX : 버그 수정
' * DOCS : 문서 수정
' * TEST : 테스트 코드 추가
' * TESTFIX : 테스트 코드 수정
' * REFACTOR : 코드 리팩토링
' * STYLE : 코드에 영향을 주지 않는 변경사항
' * CHORE : 빌드 부분 혹은 패키지 매니저 수정사항
'
' 제목 규칙
' * 제목 작성 후 공백 한줄을 포함해야, 제목과 본문이 구별됨
' * 제목 첫 글자는 대문자로 작성, 마침표를 사용하지 않음
' * 제목은 명령문으로 사용, 과거형을 사용하지 않음
'
' 본문 규칙
' * 본문 작성 후 공백 한줄을 포함, 본문과 Resolves가 구별
' * 본문의 각 행은 72글자로 제한
' * 본문은 "왜"와 "무엇을"위주로 작성
' * 본문은 행으로 구분되어야 함
'
' ################
' # Remember me ~ Commit Message 규칙
' ## 1. 제목과 본문을 빈 행으로 구분한다.
' ## 2. 제목을 50글자 내로 제한
' ## 3. 제목 첫 글자는 대문자로 작성
' ## 4. 제목 끝에 마침표 넣지 않기
' ## 5. 제목은 명령문으로 사용하되, 과거형을 사용하지 않는다.
' ## 6. 본문의 각 행은 72글자 내로 제한
' ## 7. 어떻게 보다는 무엇과 왜를 설명
' ################
Pull request 템플릿
## 연관이슈
#1, #2
## 작업 상세 내용
## 연관 이슈
> #1, #2
## 작업 내용
> 이번 PR에서 작업한 내용을 간략히 설명해주세요(이미지 첨부 가능)
### 스크린샷 (optional)
## 리뷰 요구사항(optional)
> 리뷰어가 특별히 봐주었으면 하는 부분이 있다면 작성해주세요
>
> ex) 메서드 XXX의 이름을 더 잘 짓고 싶은데 혹시 좋은 명칭이 있을까요?
pull request 시 브랜치 사라지지않게 protection rule 적용
https://kotlinworld.com/292
Xcode 에서 풀리퀘스트 하고 머지 할때는... 깃헙가서 하자.
자동으로 메시지 적어주는데 굳이 적고있기 싫다