원문 캡처 · scopedcommits.com
원문 캡처 · scopedcommits.com

Scoped Commits는 기여자가 커밋 로그를 빠르게 파악하도록 변경된 하위 시스템·영역·모듈을 메시지 앞에 쓰는 느슨한 형식 표준이다. 일반 커밋 메시지는 다음 구조를 따른다.

<scope>: <description>

[optional body]

[optional trailer(s)]

<scope>에는 변경 대상 영역을, <description>에는 변경 내용을 짧게 쓴다. 선택 항목인 본문에는 자세한 내용을, 트레일러에는 커밋 관련 메타데이터를 적는다. 되돌리기나 병합 같은 특수 커밋은 원하는 형식을 사용할 수 있다.

각 프로젝트는 유효한 scope 목록과 설명·본문·트레일러 작성 규칙을 추가로 정할 수 있으며, 특수 커밋에도 형식 규칙을 적용할 수 있다. Linux, FreeBSD, Git, Go, nixpkgs에서도 각기 다른 scope 표기 사례와 작성 문서를 제시한다.

이 형식은 변경 영역을 메시지 첫머리에 둬 기여자가 관련 코드를 찾거나 작업 중인 변경과 충돌할 만한 커밋을 살펴볼 때, 디버깅 담당자가 버그와 관련된 영역의 변경을 조사할 때, 장애 대응자가 서비스 중단 시점 전후의 변경을 훑을 때 유용하다고 설명한다. 예를 들어 API 오류가 급증한 시점에 auth 영역의 커밋이 보이면 원인 후보로 살펴볼 수 있다.

여러 영역을 건드린 커밋은 이들을 포괄하는 더 일반적인 scope를 쓰거나, 여러 scope를 쉼표로 나열할 수 있다. 전체 트리를 수정했다면 treewide, all, global 같은 scope를 사용할 수 있다. 적절한 scope를 정하기 어렵다면 특수 커밋으로 처리하고 scope를 생략한 뒤 설명을 작성하는 방법도 제시한다. 되돌리기 커밋 역시 기본 Git 형식을 쓰거나 되돌리는 원래 커밋의 scope를 포함한 사용자 지정 형식을 쓸 수 있다.

티켓 번호는 메시지 어디에나 넣을 수 있다. scope 뒤 괄호 안에 쓰거나 본문·트레일러에 넣는 방식이 예시로 제시된다. 한편 Scoped Commits로 변경 로그를 자동 생성하지 말라고 권한다. 커밋 로그는 코드베이스의 변화 과정을 이해하려는 기여자용이고, 변경 로그는 릴리스 사이에 달라진 점을 알려는 사용자용이라는 설명이다.

Conventional Commits에 관한 참고 글:

커밋 로그와 변경 로그를 구분하는 참고 자료: