2017-11-23 1 views
1

현재 개발 프로세스를 어떻게 처리하고 있는지 재구성하고 있습니다. DEV에서 STAGE/PRODUCTION 서버로 파일/폴더를 승격시키기 위해 항상 서버에 ssh를 설치하는 것이 매우 어렵 기 때문에 간단한 병합을 허용하는 방법으로 git 환경을 설정하는 것이 좋습니다. dev-branch를 통해 "promotion"을 수행하십시오.개발/준비/생산을위한 git checkout 분기

이 경우 우리는 프로젝트에서 새 푸시가 수신 될 때 서버의 다른 위치로 체크 아웃하는 3 개의 다른 브랜치가 필요합니다.

3 개의 다른 환경 (DEV - STAGE - PROD)에 대한 데이터가 포함 된 3 개의 폴더가 서버에 있다고 가정 해 보겠습니다. 그런 다음 스키마는 다음과 같이 다소 보일 것이다 : 나는 자식에게로 베어의 repos를 설정하고 그런 종류의 일이 자식 가능한 경우 궁금 해서요

Branch checkout schema

.

여러분이 저에게 제공 할 수있는 모든 도움에 감사드립니다. : D

+0

매우 일반적인 설정입니다. 귀하의 질문은 무엇인가? –

+0

음, 그 해결책을 아직 알지 못했고 그것이 내가 묻는 이유입니다. 카를로가 나에게 멋진 해결책을 제공 했어! –

답변

1

아이디어는 --work-tree=/path/ 옵션을 사용하여 특정 작업 디렉토리에 체크 아웃을 얻을 수있는 서버에 post-receive hook를 사용하여 특정 디렉토리

에 강제 (-f 옵션) 체크 아웃을 설정하는 것입니다 .. .

this Gist로 구성된 (실행 비트 세트를 가진 파일로 hooks/post-receive 서버 베어 REPOS에 저장하기 위해) 샘플 코드가 될 수있다 :

#!/bin/bash 
echo '--- --- --- --- --- --- --- --- --- --- ---' 
echo 'Deploying site...' 
echo '--- --- --- --- --- --- --- --- --- --- ---' 

if ! [ -t 0 ]; then 
    read -a ref 
fi 

IFS='/' read -ra REF <<< "${ref[2]}" 
branch="${REF[2]}" 

# Master Branch 
if [ "PROD" == "$branch" ]; then 
    git --work-tree=/path/to/public/PROD checkout -f $branch 
    echo 'Changes pushed to production site' 
fi 

# Stage Branch 
if [ "STAGE" == "$branch" ]; then 
    git --work-tree=/path/to/public/STAGE checkout -f $branch 
    echo 'Changes pushed to stage site' 
fi 

# Development Branch 
if [ "DEV" == "$branch" ]; then 
    git --work-tree=/path/to/public/DEV checkout -f $branch 
    echo 'Changes pushed to dev site' 
fi 

echo '--- --- --- --- --- --- --- --- --- --- ---' 
,617,

체크 아웃을위한 또 다른 가능한 sintax는

GIT_WORK_TREE=/path/to/test/site git checkout -f 
+0

도와 주셔서 감사합니다. 나는 post-receive 후크를 추가하는데 약간의 장님이었다.) ... 표준 작업 트리 설정 이외의 다른 것을 사용하지 않았기 때문에 여기에서 전체 쉘프 스크립트를 사용했다는 것은 내 마음에 안 들었다. –

+0

완벽한 ... 유용 할 것입니다. –

+0

BTW ... 매력처럼 작동합니다! ;) –