Git Message(commit message template)

경험이 기록으로·2022년 9월 14일
0

Git

목록 보기
2/2

1. commit.template 옵션

Git Message에 들어가기 앞서..

commit.template 옵션을 알고 가는 것이 중요하다.

commit.template 옵션은 Git의 config(환경설정) 중 하나의 설정 옵션으로 Git이 보여주는 커밋 메세지의 템플릿 정보를 설정하는 옵션이다.

이 옵션을 사용하여 커밋 메세지를 작성할 때 커밋 메세지를 일정하게 유지할 수 있도록 도움을 준다.

앞으로 얘기할 GitMessage는 commit.template 옵션을 이용하여 만들어둔 커밋 메세지 템플릿을 git의 config에 설정해주는 것 뿐이다.



2. commit message template 사용하기

커밋 템플릿 파일을 사용하기 위해서는 commit message template 파일을 생성하고 git에 생성한 파일을 등록해야한다.
아래의 과정을 통해 commit message template 기능을 어떻게 사용할 수 있는지 살펴보자.

1. .gitmessage.txt 파일을 생성하기

  • repository의 루트 디렉토리에 .gitmessage.txt 파일을 작성해준다.
  • 파일 이름은 다른 이름으로 수정해도 상관 없다.


2. .gitmessage.txt 내용 작성하기

  • 생성한 파일에 아래의 내용을 작성해준다.
  • 보통 커밋 메세지의 구조는 헤더, 본문, 바닥글을 따르지만 아래의 template은 바닥글을 제거한 헤더, 본문의 구조를 따른다.
################
# [이슈번호] <타입> : <제목>의 형식으로 제목을 아래 공백줄에 작성
# 제목은 50자 이내 / 변경사항이 "무엇"인지 명확히 작성 / 끝에 마침표 금지
# 예) feat : 로그인 기능 추가

# 바로 아래 공백은 지우지 마세요 (제목과 본문의 분리를 위함)

################
# 본문(구체적인 내용)을 아랫줄에 작성
# 여러 줄의 메시지를 작성할 땐 "-"로 구분 (한 줄은 72자 이내)

################
# 타입 종류
# feat : 새로운 기능 추가
# fix : 버그 수정
# docs : 문서 수정
# test : 테스트 코드 추가
# refact : 코드 리팩토링
# style : 코드 의미에 영향을 주지 않는 변경사항
# chore : 빌드 부분 혹은 패키지 매니저 수정사항
# error : 에러가 해결되지 않은 코드. merge request 하면 안 됨
################
  • 아래의 규칙을 준수하는 다른 커밋 메세지 템플릿도 사용이 가능하다.

    커밋 메세지의 7가지 규칙

    1. 제목과 본문을 빈 행으로 구분한다
      2. 제목을 50글자 내로 제한
      3. 제목 첫 글자는 대문자로 작성
      4. 제목 끝에 마침표 넣지 않기
      5. 제목은 명령문으로 사용하며 과거형을 사용하지 않는다
      6. 본문의 각 행은 72글자 내로 제한
      7. 어떻게 보다는 무엇과 왜를 설명한다

3. git과 .gitmessage.txt 파일 연결하기

  • 아래의 명령어를 통해서 git과 작성한 commit message template 파일을 연결할 수 있다.
  • git config의 local에 대한 설정 중 commit.template 옵션에 해당 commit message template 파일을 연결해주는 명령어다.
    ※ 경로를 작성할 때는 띄워쓰기가 있는 경우 '' 로 감싸주어 사용해야한다.
git config --local commit.template /Users/leewooseong/Desktop/study/'TodoMate Clone'/.gitmessage.txt

4. git add & git commit으로 커밋하기

  • 커밋할 내용이 있는 경우 git add 및 git commit 명령어를 이용하면 커밋을 수행할 수 있다.
  • git commit을 할 경우 아래처럼 commit.template에 설정한 .gitmessage.txt 파일의 내용이 나타나는 것을 확인할 수 있다.
  • #으로 시작하는 내용들은 모두 주석으로 인식되기 때문에 .gitmessage.txt 내용을 보면서 commit message를 작성할 수 있게 된다.


🚨 code --wait 설정***

  • git commit을 수행하던 중에 아래의 에러를 겪을 수 있었는데 이 에러는 git config에서 --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"


3. Git config 규칙

위의 내용과 관련된 내용으로 같이 알아두면 좋은 내용으로 git config 규칙을 짧게 나마 소개하려 한다. git config에 적용되는 규칙을 이해하면 위서 사용했던 명령어를 좀 더 직관적으로 이해할 수 있다.


3.1 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의 환경설정을 관리하는 행위는 동일하지만 관리하는 파일에 차이가 있기 때문에 이처럼 옵션 사용에 있어서 차이가 생긴다.


3.2 system, global, local

git config 파일의 종류는 3가지로 각각 독립적으로 존재하며 git config 파일이 영향을 미치는 범위에 따라 다음과 같이 나뉜다.

  1. system에 있는 모든 사용자와 모든 저장소에 적용되는 system 설정 파일
  2. 해당 사용자에게만 적용되는 global 설정 파일
  3. 현재 작업 중인 저장소에 적용되는 local 설정 파일

--system, --global, --local 옵션을 git config 명령어와 조합하면 각각의 설정 파일에 접근할 수 있다.


3.3 git config 규칙

system, global, local의 범위를 살펴보면 system, global, local 순으로 점점 관리하는 범위가 줄어든다. 만약에 중복되는 동일한 설정이 각 파일에 존재한다면 어떻게 처리할까?

git은 특정한 설정을 찾아야하면 우선 좁은 범위(local)에 있는 설정 파일의 설정을 이용하여 넓은 범위(global, system)에 있는 설정 내용은 무시한다.

공식문서에서 그 규칙을 다음과 같이 설명한다.

우선 Git은 내장된 기본 규칙 따르지만, 설정된 것이 있으면 그에 따른다는 점을 생각해두자

즉, 기본 규칙_system 범위를 따르며 global이나 local에 동일한(중복되는) 설정이 있다면 system 설정 파일에 있는 내용이 아닌 좀 더 작은 범위의 설정 파일을 따르겠다는 뜻이다.


3.4 commit message template & git config

결론이다!

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

References


profile
언제나 작성한 코드에 대해 이유를 말할 수 있도록

0개의 댓글