2011-10-09 4 views
5

웹 응용 프로그램을 작성하기 시작했습니다.커밋 후 git hook 사용

저는 버전 관리에 GIT를 사용하고 있으며 같은 컴퓨터에 자식과 웹 서버가 있습니다. dev에, 테스트 및 프로덕션 나는 모든 dev에, 테스트 또는 응용 프로그램을 업데이트 할 것을 약속 한 후 자식 후크를 사용하려면

:

응용 프로그램은 3 개 환경을 가지고있다.

무엇이 가장 좋은 방법입니까? DEV 및 테스트 업데이트해야합니다 - 메시지 앞에 : 나는 커밋 할 때

  1. 가, 개발이 자동으로
  2. "테스트"를 포함 커밋 메시지를
  3. 업데이트해야합니다

    나는 이런 식으로 뭔가를해야합니다.

  4. 커밋 메시지에 "생산 :"메시지가 포함 된 경우 - 생산, dev 및 테스트를 업데이트해야합니다.

고마워요!

+4

(더 일관되고 쉽게 느끼기 때문에) 제안 : dev에는 하나의 _branch_, 테스트에는 하나, 프로덕션에는 하나만 사용하십시오. "테스트"를 할 때마다 훅이 테스트 환경을 업데이트해야합니다 (등등). – KingCrunch

+0

제안 해 주셔서 감사합니다. – Irakli

답변

1

난 그냥이 문제를 해결하기 위해 후크/미니 bash는 스크립트를 작성했습니다

#!/bin/bash 

if git log --pretty=format:%s -1 | grep -q "^test: " 
then 
    #action/update dev/test 
elif git log --pretty=format:%s -1 | grep -q "^production: " 
then 
    #action/update dev/test/production 
else 
    #action/update dev 
fi 

그것은 내 첫 bash는 스크립트가 그래서 ..이 :)

+0

여기서'git checkout -f'를 사용하면 유용 할 수 있습니다. – jackyalcine

1

당신이 쓸 수있는 포스트 커밋이 git log -1 --format=%B 같은 것을 사용하여 메시지를 커밋 git push dev 등의 적절한 조치를 할 구문 분석 훅 등

원격 중앙의 repo에 커밋을 밀어 대해 이야기하는 경우와 그 레포가 이것을해야만한다면, 비슷한 방법으로 post-receive 훅을 사용해야 만합니다. 커밋 후크는 사용자가 커밋 한 클라이언트 저장소에서 실행됩니다.

메시지에서 말한 것을 사용하여 환경으로 푸시하는 것은 적절한 워크 플로가 아닙니다. 체리가 커밋을 선택할 수있는 다른 지점을 가질 수 있습니다. test 브랜치를 푸시 할 때 테스트 환경이 업데이트되는 등의 후크를 설정할 수 있습니다.

+0

감사합니다. 당신은 나를 도왔습니다 – Irakli

+0

당신은 저를 도왔지만 완전한 대답은 아닙니다. 이 문제에 대한 내 새 게시물을 확인하십시오. 다시 한 번 감사드립니다! – Irakli

2

이라 클리 아이디어에 기반을 개선하는 데 도움 주시기 바랍니다있다 여기에 내가 같이 작업 한 내용입니다 ... 내 REPO에 포스트받을

#!/bin/bash 

MESSAGE=$(git log -1 HEAD --pretty=format:%s) 

if [[ "$MESSAGE" == *\[staging\]* ]]; 
then 
    #action/update staging 
    # another method not being used... 
    # GIT_WORK_TREE=/path/to/working/site/ git checkout -q -f staging 
    echo "NOTE: Beginning Auto-Push to Staging Server... " 
    `git push staging` 
    echo "======================================================== 
======== Done! Pushed to STAGING.com ============= 
======== Thanks Captain. Keep up the good work! ======== 
========================================================" 
elif [[ "$MESSAGE" == *\[production\]* ]]; 
then 
    #action/update production 
    echo "NOTE: Beginning Auto-Push to Production Server... " 
    # `git push production` 
    echo "======================================================== 
======== Done!!! Pushed to Production.com ======= 
======== Test immediately for any errors! ========= 
========================================================" 
fi 

참고 :

'git push staging'작업을 수행하려면 작업중인 트리에 .git/hooks/post-reveive 후크가 있어야합니다. 내가 'umask 002 & & git reset --hard'를 하단에 추가 한 것을 제외하고는 this code을 사용했습니다. 2

[receive] 
    denycurrentbranch = ignore 

참고 :

나는 또한 작업 트리의 .git/config 파일에 denyrecive를 추가했다

이 설정은 작은을 위해 ... 모든 사람들에게 해당되지 않습니다 (ish) 사이트에서 빠른 & 업데이트가 문제가되지 않습니다.