2011-11-20 3 views
3

을 포스트받을 수 있습니다. 예를 들어 .sql 파일이 변경되면 db에 덤프되어야합니다.는에 GIT와 저장소 파일에 액세스하기 위해 어떻게 GIT으로이 시나리오가 후크

이 같은 성명에 GIT에서 '포스트 - 수신'훅을 사용하고 있습니다 :

DUMP=$(git diff-tree --name-only -r -z master dump.sql); 

if [ -n "$DUMP" ]; then 
    // using the new dump.sql 
fi 

난 그냥 후크에서 밀려 새로운 dump.sql에 어떻게 액세스 할 수 있습니까?

답변

7

사용 개정 $ 레브에서 파일 dump.sql을 검색 할 수 있습니다

git cat-file blob $rev:dump.sql 

을 포스트받을 후크도 마스터를 밀어 이외의 것들에 대한라고 ... 잘하면 당신이 어딘가에 수표를 가지고 당신이 ' 갱신 된 마스터 참조를 다시 처리한다. 스타일의 문제로, 후크 내에서 직접 마스터를 참조하는 것이 아니라 후크에 전달 된 새 개정 값을 사용합니다.

보통 내가 이런 포스트받을 후크 쓰기 : 이것은 또한 한 번에 마스터하기 위해 여러 커밋을 통해 전송을 한 번만 눌러 대처, 중요한

while read oldrev newrev refname; do 
    if [ "$refname" = "refs/heads/master" ]; then 
     # definitely updating master; $oldrev and $newrev encompass the changes 
     if git diff-tree --name-only -r -z $oldrev $newrev dump.sql; then 
      # dump.sql changed... 
     fi 
    fi 
done 

을 --- 명령은 질문에 보여 주었다 마스터에 대한 마지막 커밋 만 보았습니다.

+0

대단히 감사합니다! 참조 된 "분기"가 다른 분기 대신 마스터인지 확인하는 방법이 있습니까? – Randomize

+1

@Randomize 포스트 수신 후크가 stdin에 대한 몇 가지 정보를 전달합니다 ... 답변을 편집하여 설명 드리겠습니다. 더 읽기 쉬울 것입니다. – araqnid

+0

WOW! 다시 한 번 감사드립니다! 마지막 질문 : 인터넷 검색 너무 일반적인 문구를 쓰는 것에 대한 문서를 찾았습니다. 후크, 환경 변수 정의 등을 올바르게 작성하는 방법을 설명하는 좋은 사이트 나 책을 알고 있습니까? – Randomize