2011-03-19 2 views
2

Gitosis (Debian Lenny)를 사용하여 다른 원격 저장소/위치로 푸시 할 수있는 웹 응용 프로그램을 개발 중이므로 "출혈 가장자리 ","릴리스 후보자 ", & 미러링 된 실제 웹 디렉토리 및 코드베이스가있는"프로덕션 "버전의 응용 프로그램. 나는 각 디렉토리에 응용 프로그램의 한 지점을 갖고 싶어한다. 그래서 한 저장소, 세 "라이브"버전.원격 서버에 푸시 된 분기를 기반으로 다양한 웹 폴더를 업데이트하는 Git 후크

나는 힘내에있어서 새로운 편이므로 아마도 더 나은 해결책이있다. 그러나 지금까지는 내가 찾지 못한 가지에 갈고리를 부착하는 방법을 찾고있다. 어떤 분기가 커밋되고 있는지 필터링합니다.

내 질문은 커밋 된 분기를 확인하고 해당 분기를 기반으로하는 디렉터리에 대한 변수를 설정하며 코드 기반을 즉시 액세스 할 수있는 해당 디렉터리에 복사하는 포스트 업데이트 훅을 설정하는 방법에 관한 것입니다. HTTP?

git rev-list --branches --pretty=oneline --max-count=1 

는 같은 반환합니다

cc5112ba59bc82f2e847ac264317c062ce80f69f test commit 

을하지만 난 "실험"또는 "마스터"같은 분기 자체의 이름이 필요합니다.

1) 문자열로 단지 (예 : "마스터"커밋 지점, "실험")의 이름을 가져옵니다

2) 사용 :

그래서 기본적으로 내가 좋아하는 뭔가를 찾고 있어요 배쉬 경우 같은

3) 실행 뭔가 사용하는 어떤 디렉토리 선언 "자식 아카이브 --format = 타르 HEAD | (CD를 $ 오시는 & & 타르 XF를 -)"위치가 케이스에서 반환 된 것입니다.

는 내가 다음에 가까워지고 있다고 생각하지만, 지점 이름을 반환하지만 대신 메시지를 저 지르지 않은 그것을 실현 :

#!/bin/sh 

# Get substr from "sha1[space]commit-msg" 
BRANCH=$(git rev-list --pretty=oneline --branches --max-count=1 | awk '{split($0,array," ")} END{print array[2]}') 
case $BRANCH in 
    "experimental") 
     dir="/home/APP_NAME/experimental" 
    ;; 
    "master") 
     dir="/home/APP_NAME/production" 
    ;; 
esac 
# move to location and copy files 
git archive --format=tar HEAD | (cd $loc && tar xf -) 

내가 깨닫지 않았다 난 항상 같은 지점을 넣어 경우 커밋의 첫 번째 부분은 이와 같은 것을 성취 할 수 있지만 실제로 그것에 대해 걱정하고 싶지는 않습니다.

도움을 주시면 감사하겠습니다. 미리 감사드립니다!

git symbolic-ref HEAD 
# or 
git rev-parse HEAD 

하는 당신에게 :

답변

0

당신은, 당신이 알고, 그 훅을 완료 할 수 있습니다 (권장되는 방법은 아니지만이 post-update hook 작업 할 수있는)을 비 베어의 repo에 밀어해야 현재 분기의 이름이고 $ref은 푸시 된 분기를 나타냅니다.
그런 다음 올바른 트리에 이미 설정된 세 가지 작업 트리를 업데이트 할 수 있습니다.

0

아마도 누락되었지만, 이것이 post-update 훅에있는 경우, 후크에 대한 매개 변수로 업데이트되는 참조의 이름을 얻게됩니다. 예 :내 밀어 저장소에 masterexperimental를 업데이트하는 경우, 다음 post-update가 호출됩니다 :

post-update refs/heads/master refs/heads/experimental 

... 그리고 당신은 당신의 후크 스크립트에 $1$2 평소에 액세스 할 수 있습니다.

덧붙여 말하자면 githooks 문서는 post-receive 훅 대신에 표준 입력에 대한 정보를 얻는 대신에 ref의 이전 값과 새로운 값을 제공합니다 이름, 유용 할 수도 있습니다.