2011-11-30 3 views
1

git을 사용하여 웹 개발을위한 워크 플로우를 고민하고 정리 한 끝에 마지막 단계에서 스테이징 서버를 추가하는 작업을했습니다. 우리는 지역에서 개발/테스트를하고 repo로 밀어 넣습니다. 이제 다른 부서의 사람들이 놀 수 있고 물건을 깨지 않고 새로운 것을 시험해 볼 수 있도록 샌드 박스가 있어야합니다.git 브랜치 배포

원격 저장소에는 2 개의 장기 실행 분기 (nvie 분기 모델의 정신에서), 마스터 및 개발이 필요합니다.

우리는

등 site.com의 docroot에로 마스터 체크 아웃 마스터로 발전 하나 개의 repo에 밀어 test.site.com의 docroot를에 개발 브랜치를 체크 아웃하고, 준비가되면, 병합 할 수 있어야합니다 서버 ...

git init 
git add . 
git commit -m "Initial commit" 
git checkout -b "develop" 

그리고 우리의 로컬 시스템에

...

git clone [email protected]:/repos/repo1.git 
??? 
git push origin/develop (??? Updates test.site.com docroot) 

그리고 다시 서버에 코드 라이브 만들

,536 감사 물음표 또는 대체 제안
git checkout "master" 
git merge develop (??? Updates site.com docroot) 
git checkout -b "develop" 

그리고 로컬

git pull 

도움말.

편집 : 지금까지 몇 가지 답변을 실험 중입니다. 중간에 완전히 해키 한 아이디어가 떠올랐다. 나는 공유 할 것이라고 생각했다.

모두를 다룰 수있는 수신 후크가 하나있다.

베어 레포를 복제하고 추적합니다. 푸시 (push)가 원점/개발로 진행됩니다.

포스트 - 수신 - 설정 GIT_WORK_TREE을 test.site.com에, 체크 아웃,

커밋 메시지는 "merge_master"를 포함하는 경우를 개발 -f, docroot를

git checkout master 
git merge develop 
git checkout -f master (this would be for hotfixes) 

병합을 site.com하는 GIT_WORK_TREE을 설정 마스터를 개발하여 지역으로 끌어들이십시오.

먼지가 묻은 후 difflog로 이메일을 보내고 손을 짜내고 강한 것을 한 모금냅니다.

몇 가지 방법으로 깨뜨릴 수 있습니까?

+2

본 적이 있습니까? http://nvie.com/posts/a-successful-git-branching-model/ – kan

+0

그래, 처음에는 어떻게 처음에 git에 소개 되었습니까. 브랜치는이 시점에서 배포하는 것만 큼 문제가되지 않습니다. 나는 장기간에 걸친 두 가지 지점의 중심 아이디어를 좋아했습니다. – James

답변

1

제 제안은 두 docroots를 모두 git 작업 복사본으로 만드는 것입니다. 이 후

은 두 가지 옵션이
  1. 모두 git fetch development-repo; git reset --hard development-repo/branch 같은 일을 할 cron 작업을 가지고 있습니다. 이전에 이런 일을했는데 하드 리셋이 필수적입니다. 어쨌든 docroot에 들어간 임의의 임의의 변경 사항을 누설하게됩니다.
  2. 개발 담당자에게 post-update 후크가 있으면 누군가가 뭔가를 푸시 할 때마다 위와 같은 조치를 취하십시오. 불행히도 저는이 작업 예제를 가지고 있지 않습니다.
2

git에서는 보통 체크 아웃이있는 저장소로 푸시하지 않습니다. 조금도. 체크 아웃 된 브랜치로 푸시 할 수 없다는 것을 제외하고는 하나만 푸시 할 수 있지만 대개는 안됩니다. 주로 웹 서버가 중단되어 수정해야하는 경우 중앙 저장소를 방해하지 않도록 명확하게 분리 된 상태로 유지해야합니다.

따라서 베어 (작업 트리가없는 저장소에 사용되는 용어) 중앙 저장소가 있어야합니다. 모든 사람들이 그 저장소를 사용할 것입니다. 내부 네트워크에 있어야하며 공용 또는 테스트 서버의 docroot에 있어서는 안됩니다. 사실 나는 어느 서버에도 설치하지 말 것을 강력히 권하고 싶지만 별도의 (아마도 가상의) 컴퓨터가 될 것입니다.

이제 웹 서버가 있습니다. 작업 사본이거나 git archive을 사용하여 만든 내보내기 일 수 있으며 중앙 저장소에서 cron 또는 post-update 후크로 업데이트 할 수 있습니다.

작업 복사본은 site.com 서버에 git fetch central-repo-url master 업데이트 및 test.site.com 서버 git pull central-repo-url develop에 의해 (다른 대답에 제안 리셋 아마 더 나은 + 당신은 당신이 어떤 변화가없는 확신하기 때문에 확인은, 인출)된다.

내보내기는 git archive으로 압축 또는 타르 팩을 가져 와서 압축을 푸는 방식으로 업데이트됩니다. 그것은 조금 더 많은 일입니다.

크론은 주기적으로 명령을 실행합니다. 설정하는 것이 더 쉽지만 단점은 푸시와 서버에 표시되는 콘텐츠 사이에 지연이 있다는 것입니다.

post-update 후크는 설정하는 것이 더 복잡하지만 지연이 없습니다 (데이터 다운로드에는 다소 시간이 걸리기 때문에 분명히 지연이 있습니다). 기본적으로 서버에서 ssh 또는 웹 요청에 의해 트리거 될 수있는 업데이트를 실행하는 스크립트를 만듭니다. 중앙 저장소보다 스크립트에 넣을 스크립트 hooks/post-update을 넣으면 서버에 스크립트가 실행됩니다. 매개 변수를 제공 할 수있는 방법이 없어야하며 보안상의 이유로 스크립트가 다른 스크립트를 실행하지 않아야합니다. 어느 브랜치가 푸시되었는지 (git doc에서 찾을 수있는 곳을 보아라) 정확한 서버 만 트리거함으로써 훅을 더 진보시킬 수있다. git push origin develop보다

test.site.com 업데이트 할 (그러나 간접적으로 스크립트를 통해) 그리고 당신이 할 수 있습니다 살고 코드를 만드는 원인이됩니다 (개발 시스템에;! 서버 결코 작업)

자식 체크 아웃 마스터 git merge 개발 git 푸시 원본 마스터

마지막 명령을 실행하면 site.com이 스크립트를 통해 다시 간접적으로 업데이트됩니다.