2013-10-29 3 views
1

웹 사이트를 게시 할 때 git을 사용하고 있습니다. 워크 플로는 대략 다음과 같습니다git checkout이 너무 많은 파일을 수정합니다.

$ git add my_file 
$ git commit -m comment my_file 
$ git push # Just house-keeping, goes to my master repo 
$ git push ssh://[email protected]//var/www/repo.git 

가 웹 서버에 후크를 포스트받을 다음과 같습니다

#!/bin/bash 

working=$(pwd) 
working=${working##*/} 
working=../${working%.*} 
while read oldrev newrev ref ; do 
    branch=$(echo ${ref} | cut -d/ -f3) 
    GIT_WORK_TREE=${working} git checkout -f ${branch} 
done 

시간의 대부분이 그냥 잘 작동합니다. 괜찮다고 말하면 하나의 파일을 추가하면 체크 아웃이 하나의 파일을 수정합니다.

하루를 기다린 후 & 커밋을 한 경우에만 수신 후크의 git checkout이 작업 복사본의 모든 파일을 다시 가져옵니다. 나이를 먹을뿐만 아니라 나중에 실행되는 rsync로 엉망이됩니다.

오늘 밤 무슨 일이 일어나서 내일 일어나는 체크 아웃이 오늘 내가 반복해서 반복 할 수있는 일과는 크게 달라 지나요?

답변

0

브랜치를 사용하고 계십니까? 수신 후크에서 사이트의 코드를 호스팅하는 데 사용할 참조를 필터링하지 않는 것처럼 보입니다. 대신 수정 된 모든 참조에 대해 체크 아웃을 수행합니다. 일부 코드를 다른 분기로 푸시하면 사이트가 해당 분기를 반영하도록 업데이트됩니다. 아마도 당신은 아마 심판 (아마 refs/heads/master)에 대한 체크 아웃을 실행하고 싶습니다, 그리고 그게 전부라고 생각합니다.

아마도 내가 전혀 가지를 사용하지 않는

while read oldrev newrev ref ; do 
    if [ "$ref" == "refs/heads/master" ]; then 
     branch=$(echo ${ref} | cut -d/ -f3) 
     GIT_WORK_TREE=${working} git checkout -f ${branch} 
    fi 
done 
+0

while read oldrev newrev ref ; do branch=$(echo ${ref} | cut -d/ -f3) GIT_WORK_TREE=${working} git checkout -f ${branch} done 

을 변경. 그래서 나는 항상 내가 마스터에 있음을 언급하면서 자식을 보았다. 그러나 모호성을 없애기 위해 수신 후 후크를 단순화합니다. 가장 큰 문제는 대부분의 경우 작동하지만 마지막 푸시 이후 하루 이상을 푸는 경우 실패합니다. – craigemery

+0

다음과 같이''-d/-f3' 대신''$ {ref # refs/head /}'를 사용하여'refs/heads /'를 제거하는 것이 일반적으로''refs/heads/foo/bar'가 아니라'foo' 인 것처럼 foo/bar'를 사용합니다. 이 경우 문제는 아니지만이 경우에는'branch = master' 만 할 수 있습니다. :-) – torek

+0

참. 나는 그에게 블록을 조건부로 만드는 방법을 보여주었습니다. 명백하지 않은 경우. 나는 당신이 나 자신을 지적한 표기법을 사용하는 것을 선호한다. 그러나 당신은 절대적으로 옳습니다.이 경우에는'branch = master'라고 말하기 위해 정리하거나 지사 명을 checkout 명령으로 끌어 놓을 수 있습니다. – jszakmeister

관련 문제