#TIL git diff 문맥 파악에 도움을 주는 hunk-header
git diff에서 변경된 줄을 나타내는 Hunk를 보여준다. @@ -418,6 +418,8 @@
이런 식으로 라인 넘버를 같이 표시해 준다. 여기에 header를 출력해 변경 사항에 정보를 제공한다. 예를 들어 header에 포함된 함수나 클래스 선언을 보여줄 수 있다. 라인 넘버로는 꿈도 못 꾸는 엄청난 정보가 된다. 이 함수의 구현이 이렇게 바뀐 거구나. 이런 식으로 diff를 쉽게 읽을 수 있다.
많이 사용하는 언어는 hunk header에 유용한 정보를 보여주는 기능을 Git에서 기본 제공한다. hunk header에 정보를 표시하려고 알아본다면 아마도 비주류 언어일 가능성이 높다. Emacs의 Org-mode 라던지, Emacs Lisp 라던지.
hunk header를 어떻게 추출할지는 .gitconfig
파일에 정의한다. ’Informative diff hunks for Emacs Lisp and Org’ 글에서 정규식을 가져왔다.
[diff "org"]
xfuncname = "^(\\*+ +.*|#\\+title:.*)$"
[diff "lisp"]
xfuncname = "^(((;;;+ )|\\(|([ \t]+\\(((cl-|el-patch-)?def(un|var|macro|method|custom)|gb/))).*)$"
.gitattributes
파일에 정의한 diff 방법을 어떤 확장자에 적용할 것인지를 쓴다.
*.org diff=org
*.el diff=lisp
이제 org-mode 문서 diff에 @@ -418,6 +418,8 @@ * Git custom hunk-header 정의
처럼 어떤 구획 제목(heading)에 속하는 hunk인지 출력된다. emacs lisp는 함수 정의 부가 나온다. 1% 정도는 더 편해졌다.