본문으로 건너뛰기
개발 머꼬
개발 노트Git
hohyeon.dev24

코드 포맷터를 한 번 돌렸더니 git blame이 전부 쓸모없어진 이유

  • #Engineering Note
  • #Git
  • #Tooling

문제 발생

프로젝트 전체에 Prettier를 처음 적용하는 커밋을 하나 만들었더니, 그 이후로 git blame을 돌리면 대부분의 줄이 실제 작성자가 아니라 그 포맷팅 커밋만 가리키게 됐습니다.

원인 분석

git blame은 각 줄이 마지막으로 수정된 커밋을 보여줍니다. 코드 포맷터(Prettier, Black 등)를 전체 코드베이스에 한 번에 적용하면, 들여쓰기나 따옴표 스타일이 바뀐 거의 모든 줄이 "그 포맷팅 커밋에서 수정됨"으로 기록됩니다. 실제 로직을 작성한 사람과 시점이라는, blame이 원래 알려주려던 정보가 그 대규모 포맷팅 커밋 하나에 전부 가려져 버립니다.

해결 방안

Git은 이 문제를 위한 전용 기능을 제공합니다 — "무시할 리비전" 파일입니다.

  1. 저장소 루트에 포맷팅 전용 커밋들의 해시를 나열한 파일을 만듭니다(관례적으로 .git-blame-ignore-revs).
# .git-blame-ignore-revs
# 전체 코드베이스에 Prettier를 처음 적용한 커밋
abc1234567890abcdef1234567890abcdef1234
  1. git blame을 돌릴 때 이 파일을 참조하도록 지정합니다.
git blame --ignore-revs-file .git-blame-ignore-revs some-file.ts
  1. 매번 옵션을 붙이기 번거롭다면 Git 설정에 기본값으로 등록해둘 수 있습니다.
git config blame.ignoreRevsFile .git-blame-ignore-revs

이렇게 설정하면 git blame이 해당 커밋들을 건너뛰고, 그 줄을 실제로 마지막에 의미 있게 수정한 이전 커밋을 대신 보여줍니다.

  1. GitHub 웹 UI의 blame 보기도 저장소 루트의 .git-blame-ignore-revs 파일을 자동으로 인식해 같은 방식으로 동작합니다 — 로컬 설정뿐 아니라 GitHub에서 보는 blame에도 적용됩니다.
  2. 앞으로 대규모 포맷팅/자동 리팩터링 커밋을 만들 때마다 이 파일에 해시를 추가하는 것을 팀 컨벤션으로 정해두면, 매번 같은 문제를 반복하지 않을 수 있습니다.

공식 문서

마지막 수정

좋아요북마크

댓글0

아직 댓글이 없어요. 첫 의견을 편하게 남겨 보세요.