Outsider's Dev Story

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

git hook 사용하기

git에는 커밋, 푸쉬등의 여러가지 프로세스가 있습니다. git에서는 이러한 프로세스 전이나 후에 어떤 액션을 할 수 있도록 후킹기능을 제공하고 있는데 githook가 그 기능입니다. githook을 이용하면 커밋전이나 후에 로그를 쌓는다거나 필요없는 파일을 삭제하는 등의 액션을 자동으로 할 수 있습니다. 저같은 경우는 Gollum Wiki를 사용하고 있는데 웹 인터페이스에서 위키내용을 수정할 경우 자동으로 커밋을 되지만 푸쉬까지는 않되기 때문에 커밋할때 자동으로 푸쉬를 하고 싶었습니다.

.git/hooks 폴더의 샘플파일 리스트

위 화면처럼 git로 관리되는 프로젝트에서 .git/hooks 폴더를 보면 여러가지 샘플파일들이 있는 것을 볼수 있습니다. 파일명을 보면 대충 어떤 액션인지 볼 수 있는데 예를 들어 pre-commit.sample는 커밋전에 실행되는 쉘스크립트이고 post-commit.sample는 커밋후에 실행되는 쉘 스크립트입니다. 이 파일을 뒤에 .sample확장자를 삭제하고 pre-commit나 post-commit라고 저장해 두면 해당 액션이 실행될때 자동으로 쉘스크립트를 실행해 줍니다.

post-commit.sample의 파일내용

샘플파일을 열어보면 위와 같은데 일반적인 쉘 스크립트를 작성하면 됩니다. 저같은 경우는 커밋후에 자동으로 git push를 실행하려고 하기 때문에 아래와 같이 작성하였습니다.


#!/bin/sh
expect -c "
spawn git push origin master
expect \"Enter passphrase for key '/.ssh/id_rsa':\"
send \"RSA키\r\"
expect \"end\"
exit
"
exit

git push를 실행할 때 RSA에 대한 키를 입력해 주어야 하기 때문에 이를 자동화 하기 위해서 프롬프트에 자동으로 키값을 입력해 주어야 할 필요가 있기 때문에 찾아보니 Expect라는 것이 있어서 사용했습니다. 여러가지 찾아봤는데 프롬프트를 쉘스크립트에서 자동화 하려면 Expect밖에 방법이 없는것 같더군요. 설치되어 있지 않다면 설치해야 합니다.

위와 같이 expect를 이용해서 git push origin master를 실행하고 프롬프트가 나올경우 RSA키를 자동으로 입력하도록 작성하였습니다.(expect에 대해서는 저도 자세히 모르는데 검색하면 많은 자료가 나오더군요.)

commit할때 자동으로 git push가 실행되는 화면

이렇게 post-commit 파일을 저장해 두고 커밋을 수행하면 위처럼 자동으로 git push가 실행되는 것을 볼수 있습니다.

원하는 기능은 다 만들었는데 Gollum에서 웹으로 파일을 수정해서 커밋이 발생할때는 아직 githook까지는 지원하지 않더군요. 미리 확인못하고 이것부터 만들었더니 삽질을 했군요 ㅠㅠ
2011/09/05 00:31 2011/09/05 00:31