2011-11-24 2 views
7

개발자가 서버에 변경 사항을 적용 할 때 자동으로 업데이트하려는 티켓 시스템을 사용하고 있습니다. 이를 업데이트하기 위해 커밋 메시지와 함께 특정 URL을 GET 변수로 제공하면됩니다. 그러면 호출되는 페이지가이 변경 사항을 기록합니다. 나는가는 길을 hooks으로 알고 있지만 Bash 나 Perl에 익숙하지 않아서 꽤 도전적입니다.git post-receive hook 메시지 및 게시물을 URL에 다시 가져옵니다.

내가 이것을 달성 할 :

  • 그것은을 통해 루프 (원 푸시에 여러 가지가있을 수 있기 때문에)

    • 개발자가 서버에 다른 커밋이 새로운
    • post-receive 후크 실행 및 검사를 못살게 굴지 그들과 커밋마다 커밋 메시지 (curl http://server.com/logthis.asp?msg=Here_goes_the_commit_message, 그와 비슷한 것)가있는 URL이 열릴 것입니다.

    그게 전부입니다. 이런 종류의 아이디어와 관련하여 somesamples을 체크 아웃 했는데도 정확히 아무 것도하지 않습니다. 어떻게이 일을 할 수 있겠습니까?

  • +0

    왜 downvote ?? –

    답변

    9

    주 PITA는/usr/share/doc/git/contrib/hooks/post-receive-email (show_new_revisions)에서 빌린 올바른 새 개정 목록을 분리하는 것입니다.

    while read oval nval ref ; do 
        if expr "$ref" : "^refs/heads/"; then 
         if expr "$oval" : '0*$' >/dev/null 
         then 
          revspec=$nval 
         else 
          revspec=$oval..$nval 
         fi 
         other_branches=$(git for-each-ref --format='%(refname)' refs/heads/ | 
          grep -F -v $ref) 
    
         # You may want to collect the revisions to sort out 
         # duplicates before the transmission to the bugtracker, 
         # but not sorting is easier ;-) 
         for revision in `git rev-parse --not $other_branches | git rev-list --stdin $revspec`; do 
            # I don't know if you need to url-escape the content 
            # Also you may want to transmit the data in a POST request, 
          wget "http://server.com/logthis.asp?msg=$(git log $revision~1..$revision)" 
         done 
        fi 
    done 
    
    +0

    조심성. 만약 당신이 리비전을 만들어 동일한 푸시의 다른 브랜치에 병합한다면, 위 코드에 의해 건너 뛰게됩니다. –

    관련 문제