2013-10-30 1 views
0

내 자식 저장소가 --bare 인수로 시작된 서버가 있습니다.다른 분기에 대해 다른 방식으로 후크합니다.

#!/bin/bash 
cd /home/git/sureshots.git 
GIT_WORK_TREE=/home/andrepadez/production/sureshots git checkout -f 
echo 'branch master deployed to live' 

이 난 단지 내가 분기 마스터에 밀어 때 발생하는 checkout -f를 원하는 : 후크 디렉토리에서
, 난 후받을 후크가 있습니다. 내가 다른 지점으로 누르면

  1. , 내 work_tree가 업데이트되지 않습니다하지만 난 여전히 '살 배치 지점 마스터'의 에코를 참조하십시오.
  2. 분기 릴리스에 대해 다른 설정을하고 싶습니다.

나는 총알 하나를 이해하고, 총알 2
나는이 문서를 통해 검색 한 작업을 수행하는 방법을 배우고 싶지만 내가 그것을 이해 할 수 없습니다. 감사합니다.

답변

1

stdin에서 업데이트 된 참조를 읽은 다음 마스터가 업데이트 될 때 후크를 트리거해야합니다. 같은 뭔가 :

while read oldrev newrev ref ; do 
    if [ "$ref" == "refs/heads/master" ]; then 
     GIT_WORK_TREE=/home/andrepadez/production/sureshots git checkout -f 
     echo 'branch master deployed to live' 
    fi 
done 

업데이트 :

미안 해요, 난 거기에 문제가 있었다 통지를하지 않았다. post-receive 스크립트는 항상 모든 푸시에서 실행되지만 체크 아웃 명령은 현재 HEAD (마스터)가 무엇이든지 체크 아웃합니다. 다른 브랜치를 배치하기 위해 필요하다면, post-receive 스크립트를 수정해야한다.

여기에 유의해야 할 몇 가지 사항이 있습니다. 힘내는 배포 도구가 아닌 버전 제어 도구입니다. 따라서이 작업을 수행 할 수는 있지만 일반적으로 권장하지 않습니다. 브랜치 전개, 변경 사항 강제 실행 (필요한 경우) 및 스크립트 체크 아웃을 통해 브랜치 전개를 수행하면이 작업을 조금 더 향상시킬 수 있습니다. 그렇게하면 마스터를 손상시키지 않지만 배포 대상을 제어 할 수 있습니다.

gitolite 문서에는 여전히 유용하다고 확신하는 경우 git as a deployment tool을 사용하는 데 대한 흥미로운 정보가 있습니다.

+0

쿨, 고마워. 좋은 첫 걸음이야. 하지만 다른 브랜치로 푸시했을 때 스크립트가 실행되었지만 프로덕션 디렉토리가 변경 사항을 가져 오지 않은 이유는 무엇입니까? –

+0

@ AndréAlçadaPadez 댓글 블록에 너무 길기 때문에 답을 업데이트했습니다. :-) – jszakmeister

+0

다시 한번, 훌륭한 설명. 감사합니다 –

관련 문제