본문 바로가기

Git+Github

지금 당장 좋은 커밋 메시지를 남기는 방법(with Git Commit Template)

clean code? clean commit!

좋은 코드를 작성하는 것은 엄청 중요하고, 꾸준히 반복하고 또 연습해도 상당히 어려운 일이다.

갑자기 좋은 코드를 작성하는 것에 대해서 왜 얘기하냐고 할 수 있는데, 그 이유는 좋은 코드를 남기는 것 만큼 중요한 게 "좋은 커밋 메세지(Commit Message)를 남기는 것"이라고 말하고 싶기 때문이다. (그런데 사람들은 이것을 간과한다...)

물론 어떤 것이 좋은 코드인가? 라는 질문에도 여러 답변이 있다.

  • 결합도는 낮고 응집도는 높은 객체지향적인 코드
  • 짧고 간결한 코드
  • 가독성이 좋은 코드
  • 더 이상 고칠게 없는 코드
  • 중복이 없는 코드
  • 테스트가 많은 코드
  • 기타 등등...

이와 유사하게 어떤 것이 좋은 커밋 메시지인가? 라는 질문에도 여러 답변이 있다.

  • 먼 훗날 다시 떠올리기 좋은 메시지
  • 간결한 메시지
  • 상세한 메시지
  • 기타 등등...

다소 추상적인 의미가 있을 수 있지만, 결국에는 저런 조건들이 모여서 하나의 구체적인 전략이자 조직간의 약속 또는 전략이 될 수 있다는 얘기가 하고 싶다.

그런 전략을 공유하는 방법으로 commit template이라는게 있다.

조직에서 commit 작성법을 규칙으로 만들고 그 규칙을 template으로 이용할 파일에서 가이드해서 모두가 그 규칙을 따르게 하는 방법이다.

이렇게 되면 여러 사람이 커밋을 해도 한 사람이 한 것 처럼 관리가 되니까 매우 이득이다.

git commit template 설정하기

1. template 만들기

프로젝트에서 git repository로 커밋할 때마다 사용할 템플릿 파일을 생성해야한다.

어디에 만들든 상관없지만, 따라하는 사람이 쉽도록 그냥 프로젝트 루트 디렉토리로 했다.

템플릿 파일의 위치와 내용은 아래와 같다.

<label>:<title>

# 제목의 길이는 최대 40글자까지 한글로 간단 명료하게 작성
# 제목을 작성하고 반드시 빈 줄 한 줄을 만들어야 함
# 제목에 .(마침표) 금지
# <label> 리스트
#   feature : 새로운 기능
#   bug     : 버그 수정
#   update  : 비즈니스 로직 변경
#   docs    : 문서 (문서 추가, 수정, 삭제)
#   test    : 테스트
#   etc     : 기타 변경사항
<description>
# 내용의 길이는 한 줄당 60글자 내외에서 줄 바꿈. 한글로 간단 명료하게 작성
# 어떻게 보다는 무엇을, 왜 변경했는지를 작성할 것 (필수)
<issue-number>
# 연관된 이슈 첨부, 여러 개 추가 가능

앞으로 git 커맨드에서 "git commit" 이라고 치면 나오는 내용이 된다.

조직의 전략에 따라 내용은 바뀔 수 있지만, 위의 예제에서 얻어갈 좋은 규칙은 제목과 본문 사이에 한 칸의 빈 줄을 만드는 것이다.

이렇게 하면 "git log --oneline" 했을 때 제목과 본문이 라인으로 구분되어 제목만 따로 볼 수 있는 것을 확인할 수 있다.

다른 것들은 각설하고... 위와 같이 템플릿을 만들었으니 이제 프로젝트에서 이 템플릿을 따르게 설정하는 법을 알아보자.

2. config 파일에서 템플릿 설정하기

git config --global commit.template ~/Documents/instagram/git-commit-template.txt

위와 같이 입력하기만 하면 끝난다.

적절하게 따라할 수 있도록 부연 설명을 하자면, git config 명령어로 설정 값을 지정하는 것이다.

—global 옵션을 줘도 되고 안 줘도 된다.

—global로 옵션을 주면 특정 프로젝트 뿐만아니라 해당 PC에서 commit하는 모든 프로젝트에서 같은 템플릿이 적용된다.

만약 특정 프로젝트에서만 템플릿이 적용되도록 하려면 해당 프로젝트 루트 디렉토리에 가서 저렇게 —global옵션을 빼고 입력하면 된다.

위 명령어에서는 모든 프로젝트에서 다 같은 commit template설정을 따를 거라고 가정했기 때문에 —global 옵션을 줬다.

commit.template 이라고 설정하면 [commit] 섹션의 'template'이라는 키(key)값을 지정하겠다는 의미다.

그리고 그 값으로 "~/Documents/instagram/git-commit-template.txt"를 지정하겠다는 의미다.

  • global 옵션을 주지 않았을 때

→ global 옵션을 주지 않았다면 프로젝트 루트디렉토리의 ".git 폴더안에 config파일"을 보면 내가 위의 명령어로 설정한 옵션 값이 어떻게 적용되는지 알 수 있다.

  • global 옵션을 줬을 때

→ global 옵션을 줬다면 계정의 루트 디렉토리(윈도우 기준 C:\Users\XXXX.gitconfig 파일)에 보면

아래와 같이 설정되어있는 것을 확인할 수 있다.

이렇게 하면 설정은 끝이다.

사용해보기

git commit

이제 git을 사용해보자!

sourcetree 같은 툴을 사용할 때는 템플릿이 보이지 않고 git bash 쉘에서 "git commit" 이라고 입력해야만 나온다.

너무 간단한 변경의 경우에 [git commit -m "~~"] 이런식으로 정할 수도 있다만, 우선 git commit 하는 것을 사용해보자.

git commit을 하려면 변경 사항을 스테이지에 올려야 한다. (→ git add)

연습을 위해 아무 텍스트파일이나 하나 추가하고 git commit 명령을 쳤다.

위와 같이 입력했더니 아래와 같이 앞에서 설정한 템플릿이 나왔다.

위와 같은 템플릿 상태에서 주석들은 어차피 커밋해도 반영이 안되니 룰에 따라 테스트로 다음과 같이 작성했다.

위와 같이 작성하고 :wq 를 이용해서 커밋메시지를 온전히 작성한 후 푸시하면 다음과 같이 github remote repository에 원하던대로 반영이 된 것을 확인할 수 있다.

(참고로 #128같은 경우 이슈와 커밋을 연동시킬 수 있는데 처음부터 #으로 쓰면 주석인줄 알고 없어지니 앞에 prefix로 close를 달았다. 이슈를 닫는 커밋이라는 의미다.)

이렇게 해서 git commit template을 적용하고 작성하는 것 까지 마쳤으니 협업에서 더 좋은 커밋을 남길 수 있도록 해보면 좋겠다.

참고 사이트

https://junwoo45.github.io/2020-02-06-commit_template/

https://meetup.toast.com/posts/106