Git Message에 들어가기 앞서..
commit.template 옵션을 알고 가는 것이 중요하다.
commit.template 옵션은 Git의 config(환경설정) 중 하나의 설정 옵션으로 Git이 보여주는 커밋 메세지의 템플릿 정보를 설정하는 옵션이다.
이 옵션을 사용하여 커밋 메세지를 작성할 때 커밋 메세지를 일정하게 유지할 수 있도록 도움을 준다.
앞으로 얘기할 GitMessage는 commit.template 옵션을 이용하여 만들어둔 커밋 메세지 템플릿을 git의 config에 설정해주는 것 뿐이다.
커밋 템플릿 파일을 사용하기 위해서는 commit message template 파일을 생성하고 git에 생성한 파일을 등록해야한다.
아래의 과정을 통해 commit message template 기능을 어떻게 사용할 수 있는지 살펴보자.
.gitmessage.txt
파일을 생성하기.gitmessage.txt
파일을 작성해준다..gitmessage.txt
내용 작성하기################
# [이슈번호] <타입> : <제목>의 형식으로 제목을 아래 공백줄에 작성
# 제목은 50자 이내 / 변경사항이 "무엇"인지 명확히 작성 / 끝에 마침표 금지
# 예) feat : 로그인 기능 추가
# 바로 아래 공백은 지우지 마세요 (제목과 본문의 분리를 위함)
################
# 본문(구체적인 내용)을 아랫줄에 작성
# 여러 줄의 메시지를 작성할 땐 "-"로 구분 (한 줄은 72자 이내)
################
# 타입 종류
# feat : 새로운 기능 추가
# fix : 버그 수정
# docs : 문서 수정
# test : 테스트 코드 추가
# refact : 코드 리팩토링
# style : 코드 의미에 영향을 주지 않는 변경사항
# chore : 빌드 부분 혹은 패키지 매니저 수정사항
# error : 에러가 해결되지 않은 코드. merge request 하면 안 됨
################
커밋 메세지의 7가지 규칙
- 제목과 본문을 빈 행으로 구분한다
2. 제목을 50글자 내로 제한
3. 제목 첫 글자는 대문자로 작성
4. 제목 끝에 마침표 넣지 않기
5. 제목은 명령문으로 사용하며 과거형을 사용하지 않는다
6. 본문의 각 행은 72글자 내로 제한
7. 어떻게 보다는 무엇과 왜를 설명한다
.gitmessage.txt
파일 연결하기''
로 감싸주어 사용해야한다. git config --local commit.template /Users/leewooseong/Desktop/study/'TodoMate Clone'/.gitmessage.txt
git add
& git commit
으로 커밋하기#
으로 시작하는 내용들은 모두 주석으로 인식되기 때문에 .gitmessage.txt 내용을 보면서 commit message를 작성할 수 있게 된다.code --wait
설정***--wait
설정을 추가해주면서 해결할 수 있었다.문제 인식
- 의도한 결과는 vscode에서 git commit
을 하면 COMMIT_EDITMSG 파일이 나타나고 이 파일에서 저장한 결과를 commit message로 반영하여 커밋을 생성하게 된다.
- 해당 에러는 터미널이 vscode에서 파일 열고 바로 터미널로 작업이 전환되어 작성하려는 commit message를 받아오지 못해서 생기는 현상
- 이는 git config를 통해 git과 에디터를 연결할 때 명령어 설정에서 --wait
설정을 빼고 code
만 설정을 해서 이러한 현상이 발생하는 것이다.
문제 해결
- git config 설정에서 code --wait
을 core.editor 옵션에 설정해주면 문제는 간단히 해결된다.
- vscode에서 git을 사용할 경우 --wait
설정을 사용하면 새롭게 나타는 vs code 인스턴스를 닫을 때까지 명령을 대기하도록 설정할 수 있다.
- 따라서 COMMIT_EDITMSG 파일 즉 vscode 인스턴스를 띄우고 터미널로 작업이 전환되지 않고 vscode 인스턴스가 닫을때까지(작업이 끝날때까지) 대기하게 된다.
git config --global core.editor "code --wait"
위의 내용과 관련된 내용으로 같이 알아두면 좋은 내용으로 git config 규칙을 짧게 나마 소개하려 한다. git config에 적용되는 규칙을 이해하면 위서 사용했던 명령어를 좀 더 직관적으로 이해할 수 있다.
우리는 보통 git config
명령어를 이용하여 git의 환경설정에 접근하여 내용을 수정 추가 삭제한다.
위에서 다뤘던 명령어 2개를 다시 확인해보자.
# 1번째 명령어
git config --local commit.template /Users/leewooseong/Desktop/study/'TodoMate Clone'/.gitmessage.txt
# 2번째 명령어
git config --global core.editor "code --wait"
여기서 주의해서 볼 것은 --local
과 --global
이다.
이렇게 옵션을 달리 쓰는 이유는 git에서 관리하는 git config 파일의 종류는 1가지 이상이 존재하기 때문이다.
두 명령어 다 git의 환경설정을 관리하는 행위는 동일하지만 관리하는 파일에 차이가 있기 때문에 이처럼 옵션 사용에 있어서 차이가 생긴다.
git config 파일의 종류는 3가지로 각각 독립적으로 존재하며 git config 파일이 영향을 미치는 범위에 따라 다음과 같이 나뉜다.
--system
, --global
, --local
옵션을 git config
명령어와 조합하면 각각의 설정 파일에 접근할 수 있다.
system, global, local의 범위를 살펴보면 system, global, local 순으로 점점 관리하는 범위가 줄어든다. 만약에 중복되는 동일한 설정이 각 파일에 존재한다면 어떻게 처리할까?
git은 특정한 설정을 찾아야하면 우선 좁은 범위(local)에 있는 설정 파일의 설정을 이용하여 넓은 범위(global, system)에 있는 설정 내용은 무시한다.
공식문서에서 그 규칙을 다음과 같이 설명한다.
우선 Git은 내장된 기본 규칙 따르지만, 설정된 것이 있으면 그에 따른다는 점을 생각해두자
즉, 기본 규칙_system 범위를 따르며 global이나 local에 동일한(중복되는) 설정이 있다면 system 설정 파일에 있는 내용이 아닌 좀 더 작은 범위의 설정 파일을 따르겠다는 뜻이다.
결론이다!
system, global, local 설정 파일들이 관리하는 설정의 범위가 다르다는 점을 이용하면
"--local
이나 --global
을 이용하여 commit message template이 적용되는 범위를 설정할 수 있다."
2가지 예시를 통해 어떻게 이를 활용할 수 있을지 알아보자.
1. --global 옵션으로 commit message template 적용하기
--global
옵션을 이용하면 해당 사용자가 사용하는 모든 저장소(repository)에서 동일한 commti message template를 적용할 수 있다.
평소에 사용하는 commit message template이 있다면 --global 옵션을 사용하여 설정해 주면 좋다.
# 명령어 형식
git config --global commit.template {사용할 .gitmessage.txt 파일 경로}
# 명령어 예시
git config --local commit.template ~/.gitmessage.txt
2. --local 옵션으로 commit message template 적용하기
--local
옵션을 이용하면 해당 저장소에서만 commit message template을 적용시킬 수 있다.
이를 활용하여 프로젝트 별로 지정해야하는 commit message template이 상이할 때 각각의 프로젝트 마다 --local
옵션으로 각각의 commit messsage template을 지정할 수 있다.
또한 이를 github과 같은 원격 저장소와 함께 사용하면 같은 저장소를 관리하는 개발자들과 commit template을 통일할 수 있다.
→ 이렇게 사용하기 위해선 각 개발자들이 아래의 명령어를 이용해서 자신의 git config에 해당 commit message template 파일을 등록할 필요가 있다.
# 명령어 형식
git config --local commit.template {각 User의 repository 내 .gitmessage.txt 파일 경로}
# 명령어 예시
git config --local commit.template /Users/leewooseong/Desktop/study/'TodoMate Clone'/.gitmessage.txt