Outsider's Dev Story

Stay Hungry. Stay Foolish. Don't Be Satisfied.
RetroTech 팟캐스트 44BITS 팟캐스트

Git 커밋메시지 작성화면에 최근 커밋목록 보여주기

git에서 커밋 메시지를 작성할 때 git commit -m "MESSAGE here"와 같이 쓰면 편리하게 커밋 메시지를 작성할 수 있기는 하지만 -m 옵션을 쓰지 않고 그냥 git commit을 입력해서 vi같은 에디터를 열어서 커밋메시지를 작성하는 것이 더 좋다고 본다. 왜냐하면 커밋메시지를 명시적이고 의미있게 작성하는 것이 무척 중요한데 -m 옵션을 너무 자주 사용하면 그 형식상 커밋메시지를 간략하게 작성할 여지가 높기 때문이다.

아무튼 커밋메시지를 작성할때는 항상 이전 히스토리를 습관적으로 참고하게 된다. 단독 작업들도 있지만 작업들은 보통 하나의 흐름이기 때문에 메시지를 작성할 때 이전 커밋메시지를 보는게 도움이 되고 때에 따라서는 이전 커밋에 합칠지 별도로 커밋할지를 결정하기 위해서 이다. 그래서 커밋하기 전에 한번 보고 들어가거나 커밋하러 에디터 열었다가 취소하고 히스토리를 다시 보고 들어가는 경우가 많다. 그러다가 얼마전에 커밋화면에서 최근 메시지를 자동으로 출력해 주는 좋은 팁을 발견했다.

커밋 메시지작성 화면

기본 설정에서 커밋메시지를 작성하는 창은 위와 같이 나타난다. 커밋메시지를 작성하는 곳 하단에 주석으로 커밋을 하는 브랜치와 커밋될 파일목록들이 나타나게 되는데 실수로 커밋하지 않도록 관련정보를 한번더 알려주는 용도이다. git은 여러 명령어를 실행하는 전후에 사용자가 원하는 동작을 실행할 수 있도록 하는 hook을 제공하고 있는데 prepare-commit-msg훅을 사용하면 커밋메시지의 화면에 추가정보를 등록할 수 있다. 이 정보를 알게된 위의 글에서는 저장소의 훅(./.git/hooks/prepare-commit-msg)에 저장하도록 했지만 이런 설정을 저장소마다 다르게 할 필요는 없으므로 전역으로 설정해서 모든 저장소에서 동작하게 하는게 맞다고 본다.

git버전이 1.7.1이상이라면 init.templatedir을 사용할 수 있다. git config --global init.templatedir '~/.git_template'를 입력해서 Git의 전역 설정으로 템플릿디렉토리를 ~/.git_template로 등록한다.(다른 이름을 사용해도 된다.) 그리고 ~/.git_template/hooks/prepare-commit-msg 파일을 생성해서 다음의 내용을 입력한다.(1.7.1버전 밑이라면 이 글을 참고하면 된다. 사실 이 설정도 이 글에서 가져온 거지만...)

#!/bin/sh

BRANCH_NAME=$(git branch | grep '*' | sed 's/* //')
if [ $BRANCH_NAME != '(no branch)' ]
then
  echo "#" >> $1
  echo "# Last 5 commit messages" >> $1
  echo "# ----------------------" >> $1
  COMMITS=`git log --pretty=format:"# %h %s [%an]" -5`
  echo "${COMMITS}" >> $1
fi

prepare-commit-msg파일은 쉘에서 실행해야 하는 파일이므로 chmod 755 prepare-commit-msg로 실행권한을 지정해야 한다.

기존저장소에서 git init으로 재설정을 한 화면

새로 생성하는 저장소는 이 템플릿 디렉토리가 적용되서 위에서 등록한 훅이 자동으로 추가되지만 기존에 생성한 git 저장소는 이 훅이 등록되어 있으므로 해당 저장소에서 git init을 다시 실행해서 재설정을 해야 한다.

커밋 메시지작성 화면에 최근 커밋 리스트가 추가된 모습

이제 git commit을 할 때 에디터 하단에 위와 같이 최근 커밋 5개가 나오는 것을 볼 수 있다. 앞에 prepare-commit-msg파일에 작성핸 내용이 쉘 명령어이므로 더 많은 커밋메시지를 보고 싶거나 추가정보를 확인하고 싶다면 여기에 추가하면 된다.

덧) 주의바랍니다. 이 팁을 사용할 경우 그냥 커밋할 때는 괜찮지만 git commit -m으로 사용할 경우는 위에서 추가한 내용이 커밋 메시지에 들어가 버립니다. -m을 사용하신다면 주의해서 적용하시길 바랍니다. 제가 -m을 잘 안써서 미처 확인 못했었네요.

덧) 이 팁은 오류가 있으므로 "Git 커밋메시지 작성화면에 최근 커밋목록 보여주기"의 오류부분 수정 글을 참고바람니다.

2013/08/16 23:55 2013/08/16 23:55