#TIL git diff 문맥 파악에 도움을 주는 hunk-header

/ddiary/assets/2024-05-25-til-git-define-custom-hunk-header-00.jpg

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% 정도는 더 편해졌다.

링크

Feedback plz <3 @ohyecloudy, ohyecloudy@gmail.com

A Random Post