본문 바로가기

Git & Github

git hooks: .git/hooks

728x90
반응형

.git/hooks

git에는 특정 명령어 단계에 따라서 원하는 작동을 script로 실행할 수 있는 기능이 있다.
 
git으로 관리되는 repository에 들어가서 .git/hooks 를 살펴보면
 
 pre-commit.sample, pre-merger-commit.sample 등등의 깃허브 명령어와 관련된 sample 파일들이 있다.
예를 들어 pre-commit 파일 script를 만들어서 실행할 수 있는 예시들이다.
 
$ nano .git/hooks/pre-commit 를 통해 아래 스크립트를 작성해서 commit 전에 실행시킬 수도 있다.
#!/bin/sh
if git-rev-parse --verify HEAD >/dev/null 2>&1 ; then
  against=HEAD
else
  # Initial commit: diff against an empty tree object
  against=d555b46075d8d1fa2ed4d2424704105897c00d11
 fi
# Find files with trailing whitespace
for FILE in `exec git diff-index --check --cached $against -- | sed '/^[+-]/d' | sed -r 's/:[0-9]+:.*//' | uniq` ; do
  # Fix them!
  sed -i 's/[[:space:]]*$//' "$FILE"
  git add "$FILE"
done
exit
 

    위 스크립트는 pre-commit 이므로, commit을 하기 전에 빈칸을 제거하는 리눅스 쉘스크립트이다.
    이와 같은 식으로 git 과 관련된 특정 커맨드와 관련하여 원하는 이벤트를 스크립트로 실행 가능

    * 다른 특정 언어로 스크립트로도 작성 가능
      이때는
      #!/bin/sh
      에 해당하는 부분을 그 언어나 실행하려는 환경에 맞게 반드시 작성해줘야 한다.

    이렇게 pre-commit을 추가한 후에는 script를 실행할 권한을 줘야하기 때문에
$ chmod +x .git/hooks/pre-commit
    위와 같이 실행권한 주는게 필수이다.

 

728x90
반응형