commit-checker

command module
v1.2.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 17, 2026 License: MIT Imports: 1 Imported by: 0

README

한국어 | English | 日本語 | 中文

commit-checker

Git 커밋 메시지와 소스 코드의 정책을 자동으로 검사하는 CLI 도구입니다. lefthook / husky 등 Git 훅 매니저와 함께 사용합니다.

기능

검사 항목 설명
주석 언어 지정된 언어(한국어/영어/일본어/중국어)로 작성된 주석인지 검사
허용 단어 사전 기술 용어·고유명사를 허용 단어로 등록하여 오탐 방지
Co-authored-by AI 기여 표시 트레일러 차단 (이메일 허용 목록 지원)
비표준 유니코드 공백 NBSP, EM SPACE, ZWSP, BiDi 제어문자 등 차단
모호한 유니코드 문자 키릴 А ↔ 라틴 A 등 시각적 혼동 문자 차단
파일 유니코드 검사 소스/마크다운 파일 내용에서 비가시·모호한 유니코드 문자 검사
잘못된 UTF-8 잘못된 바이트 시퀀스 차단
이모지 금지 커밋 메시지 및 주석에서 이모지 사용 차단 (선택적)
바이너리 파일 감지 컴파일된 실행파일 등 바이너리 파일 커밋 차단
인코딩 검사 UTF-8이 아닌 파일 커밋 차단 (chardet 기반)
데이터 파일 린트 YAML, JSON (JSON5 지원), XML 구문 검사
EditorConfig .editorconfig 규칙 준수 여부 검사
Conventional Commits 커밋 메시지 형식 강제 (선택적)
리포지터리 분석 개발 언어 감지 및 린트 설정 누락 경고
자동 수정 (fix) 유니코드/인코딩 위반 사항을 git history에서 일괄 수정
설정 마이그레이션 구 버전 설정 파일을 자동 감지하여 최신 스키마로 변환
진행 표시기 bubbletea 기반 TUI 스피너 (TTY 감지, 비TTY 시 텍스트 폴백)

설치

Homebrew (macOS / Linux)
brew install zcube/tap/commit-checker
go install
go install github.com/zcube/commit-checker@latest

Go 1.22 이상이 필요합니다. 설치 후 commit-checker version 으로 확인합니다.

바이너리 직접 다운로드

GitHub Releases 페이지에서 플랫폼에 맞는 파일을 다운로드합니다.

# Linux (amd64)
curl -L https://github.com/zcube/commit-checker/releases/latest/download/commit-checker_linux_amd64.tar.gz | tar xz
sudo mv commit-checker /usr/local/bin/

# macOS (Apple Silicon)
curl -L https://github.com/zcube/commit-checker/releases/latest/download/commit-checker_darwin_arm64.tar.gz | tar xz
sudo mv commit-checker /usr/local/bin/

# macOS (Intel)
curl -L https://github.com/zcube/commit-checker/releases/latest/download/commit-checker_darwin_amd64.tar.gz | tar xz
sudo mv commit-checker /usr/local/bin/
Docker
docker pull ghcr.io/zcube/commit-checker:latest

# staged diff 검사
docker run --rm -v "$(pwd):/repo" -w /repo ghcr.io/zcube/commit-checker diff

# 커밋 메시지 검사
docker run --rm -v "$(pwd):/repo" -w /repo \
  ghcr.io/zcube/commit-checker msg /repo/.git/COMMIT_EDITMSG

Git 훅 연동 (lefthook)

1. lefthook 설치
# macOS
brew install lefthook

# npm
npm install --save-dev lefthook

# go install
go install github.com/evilmartians/lefthook@latest
2. commit-checker 설치
go install github.com/zcube/commit-checker@latest
3. lefthook.yml 추가

프로젝트 루트에 lefthook.yml 을 생성합니다:

pre-commit:
  commands:
    comment-language:
      run: commit-checker diff

commit-msg:
  commands:
    message-policy:
      run: commit-checker msg {1}
4. 훅 설치
lefthook install

이후 git commit 시 자동으로 검사가 실행됩니다.

husky (Node.js 프로젝트)
npx husky init

.husky/pre-commit:

#!/bin/sh
commit-checker diff

.husky/commit-msg:

#!/bin/sh
commit-checker msg "$1"

설정

프로젝트 루트에 .commit-checker.yml 을 생성합니다. commit-checker init 으로 기본 설정 파일을 자동 생성할 수 있습니다. VS Code를 사용하면 .commit-checker.schema.json 스키마로 자동완성이 제공됩니다.

# yaml-language-server: $schema=./.commit-checker.schema.json

comment_language:
  enabled: true
  required_language: korean   # korean | english | japanese | chinese | any
  min_length: 5
  check_mode: diff            # diff | full
  no_emoji: false             # true이면 주석에서 이모지 금지
  extensions:
    - .go
    - .ts
    - .py

  # 허용 단어: 언어 검사에서 무시할 영어 단어 목록
  allowed_words:
    - TypeScript
    - JavaScript
    - API
  # allowed_words_file: .commit-checker-words.txt
  # allowed_words_url: https://example.com/allowed-words.txt
  # allowed_words_cache:
  #   enabled: true
  #   ttl: 24h

binary_file:
  enabled: true
  # ignore_files:
  #   - "**/*.png"

lint:
  enabled: true
  yaml:
    enabled: true
  json:
    enabled: true
    # allow_json5: true       # JSON5 주석/trailing comma 허용
  xml:
    enabled: true

encoding:
  enabled: true
  require_utf8: true
  # no_invisible_chars: true   # 파일 내 비가시 유니코드 문자 검사
  # no_ambiguous_chars: true   # 파일 내 ASCII 혼동 유니코드 문자 검사

editorconfig:
  enabled: true
  # ignore_files:
  #   - "vendor/**"

commit_message:
  # enabled: true  # false이면 모든 커밋 메시지 검사 비활성화
  no_ai_coauthor: true
  no_unicode_spaces: true
  no_ambiguous_chars: true
  no_bad_runes: true
  no_emoji: false             # true이면 커밋 메시지에서 이모지 금지
  locale: ko
  conventional_commit:
    enabled: false
  language_check:
    enabled: false
    required_language: korean

설정 파일이 없으면 기본값이 적용됩니다.

허용 단어 사전

기술 용어나 고유명사를 언어 검사에서 제외할 수 있습니다:

comment_language:
  # 인라인 목록
  allowed_words:
    - TypeScript
    - JavaScript
    - API
    - URL

  # 로컬 파일 (한 줄에 하나, # 주석 지원)
  allowed_words_file: .commit-checker-words.txt

  # URL (형식 동일, HTTP/HTTPS)
  allowed_words_url: https://example.com/allowed-words.txt

  # URL 캐싱 (선택적)
  allowed_words_cache:
    enabled: true
    ttl: 24h                  # 캐시 유효 기간
    # dir: ~/.cache/commit-checker  # 캐시 디렉터리 (기본값)

세 가지 소스(인라인, 파일, URL)는 병합되어 적용됩니다.

파일별 언어 규칙

i18n/locale 파일 등 예외 경로를 지정할 수 있습니다:

comment_language:
  required_language: korean
  file_languages:
    - pattern: "locales/**"
      language: any
    - pattern: "i18n/**"
      language: english
    - pattern: "locale/ja/**"
      language: ja
소스 내 디렉티브

파일 또는 구간 단위로 언어 규칙을 재정의합니다:

// commit-checker:ignore
// This English comment is intentional (next comment only)

// commit-checker:file-lang=english  <- 파일 전체에 적용

// commit-checker:disable:lang=english
// This block is intentionally in English
// commit-checker:enable

지원 디렉티브:

디렉티브 설명
commit-checker:ignore 바로 다음 주석 1개만 검사 제외
commit-checker:disable 이 줄부터 검사 비활성화
commit-checker:disable:lang=<L> 비활성화하고 해당 구간은 언어 L로 검사
commit-checker:enable 검사 재활성화
commit-checker:lang=<L> 이 줄부터 필요 언어를 L로 전환
commit-checker:file-lang=<L> 파일 전체의 필요 언어를 L로 설정

<L> 값: korean english japanese chinese any (또는 ko en ja zh)

커맨드

commit-checker init          기본 설정 파일(.commit-checker.yml) 생성
commit-checker diff          staged diff의 주석/인코딩/린트/바이너리/유니코드 검사
commit-checker run           추적된 전체 파일의 정책 준수 검사
commit-checker msg <file>    커밋 메시지 파일 검사
commit-checker fix           git history 자동 수정 (dry-run 지원)
commit-checker migrate       설정 파일을 최신 스키마로 마이그레이션
commit-checker analyze       리포지터리 분석 (언어 감지, 린트 설정 확인)
commit-checker version       버전 정보 출력
init 커맨드
# 기본 설정 파일 생성 (시스템 로케일 자동 감지)
commit-checker init

# 특정 로케일로 생성
commit-checker init --lang en

# 기존 파일 덮어쓰기
commit-checker init --force
run 커맨드
# 추적된 전체 파일 검사 (staged 상태 무관)
commit-checker run

diff 와 달리 스테이지 여부에 관계없이 git ls-files 로 추적된 모든 파일을 검사합니다.

fix 커맨드
# 수정 내용 미리 보기
commit-checker fix --dry-run

# 마지막 5개 커밋 수정
commit-checker fix --range HEAD~5..HEAD

# 내 커밋만 수정
commit-checker fix --mine --dry-run
migrate 커맨드
# 설정 파일 스키마 버전 감지 및 최신으로 마이그레이션
commit-checker migrate

# 변경 사항 미리 보기 (파일 수정 없음)
commit-checker migrate --dry-run

구 버전 설정 파일(예: no_coauthorno_ai_coauthor)을 자동으로 최신 스키마로 변환합니다. 주석과 서식이 보존됩니다.

analyze 커맨드
# 현재 리포지터리 분석
commit-checker analyze

개발 언어를 감지하고, 해당 언어에 대한 린트 설정 파일(.golangci.yml, .eslintrc.*, pyproject.toml 등)이 없으면 경고합니다. .editorconfig, .gitattributes, .gitignore 존재 여부도 확인합니다.

지원 언어

언어 확장자
Go .go
TypeScript .ts .tsx
JavaScript .js .jsx .mjs .cjs
Java .java
Kotlin .kt .kts
Python .py
C / C++ .c .h .cpp .cc .hpp
C# .cs
Swift .swift
Rust .rs
Dockerfile Dockerfile Dockerfile.* *.dockerfile
Markdown .md .markdown

i18n 지원

CLI 출력은 다음 언어를 지원합니다:

  • 한국어 (ko) - 기본
  • English (en)
  • 日本語 (ja)
  • 中文 (zh)

환경 변수 COMMIT_CHECKER_LANG, LC_ALL, LC_MESSAGES, LANG 또는 설정 파일의 locale 값으로 선택합니다.

라이선스

MIT

Documentation

The Go Gopher

There is no documentation for this package.

Directories

Path Synopsis
internal
charset
Package charset 는 유니코드 문자 분류 유틸리티를 제공합니다.
Package charset 는 유니코드 문자 분류 유틸리티를 제공합니다.
directive
commit-checker:file-lang=any Package directive 는 소스 코드 주석에 삽입된 commit-checker 인라인 지시자를 파싱합니다.
commit-checker:file-lang=any Package directive 는 소스 코드 주석에 삽입된 commit-checker 인라인 지시자를 파싱합니다.
emoji
Package emoji: 커밋 메시지 및 소스 코드에서 이모지를 감지하는 패키지.
Package emoji: 커밋 메시지 및 소스 코드에서 이모지를 감지하는 패키지.
i18n
Package i18n 는 go-i18n 기반의 다국어 메시지 지원을 제공.
Package i18n 는 go-i18n 기반의 다국어 메시지 지원을 제공.
version
Package version 은 빌드 시 주입된 버전 정보를 제공합니다.
Package version 은 빌드 시 주입된 버전 정보를 제공합니다.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL