2012-07-07 6 views
4

을 포스트 - 수신 :병합 나는 다음 포스트받을 후크를 사용 후크

GIT_TOP=`git rev-parse --show-toplevel` 

while read oldrev newrev refname 
do 
     echo "=== $oldrev" 
     echo "=== $newrev" 
     echo "=== $refname" 

     echo "=== 01. checkout -- $GIT_TOP/*" 
     git checkout -- "$GIT_TOP/*" 

     echo "=== 02. merging $refname" 
     git merge $refname 

     echo "=== 03. checkout -- $GIT_TOP/*" 
     git checkout -- "$GIT_TOP/*" 

done 

아이디어는 충분히 분명하다 : 나는 현재 지점이 밀려 하나와 병합 될합니다.

  • 그런 다음 실행합니다 : git status 그러면 내 로컬 트리가 브랜치와 다릅니다.

  • 더 많은 것을 git checkout -- * git dir 맨 위에 실행합니다. 이제이 명령은 내가 원하는 것을 수행합니다. git status은 이제 더 이상 차이가 없습니다.

이유는이 명령 git checkout -- "$GIT_TOP/*" 후크에서 작동, 오직 직접 호출에 의해 작동하지 않았다? 후크에서이 명령을 실행하는 방법?

P.

후크 내에서 호출 된 git rev-parse --show-toplevel<myrepo>/.git 경로를 반환하지만 그 값은 단지 <myrepo>입니다. 이것은 문제를 해결하는 데 도움이 될 수 있습니다.

답변

2

export GIT_WORK_TREE=$GIT_DIR/. 내 문제가 해결되었습니다. 지금 심지어 git checkout -- "$GIT_TOP/*"도 더 이상 필요하지 않습니다. git merge $refname이 올바르게 작동하기 때문에 올바른 방향으로.

+0

당신은 최종 버전을 포함하는 질문을 업데이트시겠습니까? :) 또는이 답변을 오히려 다음 해상도로 표시? – simme

1

Thx이 경우.

export GIT_WORK_TREE=$GIT_DIR/. 
while read oldrev newrev refname 
do 
     echo "=== merging $refname" 
     git merge $refname 
done 

이 오류가 돌아 왔을 :

나는이 시도 그냥 밀어 파일을 언급 .. "다음 파일에 대한 지역 변경 병합 덮어 쓸 것입니다."

이는 마스터 지점

에 방금받은 변화 어쩌면 체크 아웃 마스터가 필요했다 병합하려고하지 않는 것이 제안?

수동으로 병합을 수행 할 수있었습니다.

3

이제 정상적으로 작동합니다. 생각보다 덜 복사.

export GIT_WORK_TREE=`pwd` 
export GIT_DIR=`pwd`/.git