2017-09-07 8 views
1

Git은 개발 서버에서 크게 반응하지만, git push를 수행하면 git hook이 라이브 서버에 git pull을 수행하여 개발 서버. 우리의 문제는 라이브 서버에서 git pull을 수행하는 데 약 45 초가 걸리지 만 라이브 서버에서 git pull을 수동으로 수행하면 거의 즉각적입니다.Git Hook을 통한 원격 풀링은 실제로 오랜 시간이 걸립니다.

$ git push 
Counting objects: 5, done. 
Delta compression using up to 2 threads. 
Compressing objects: 100% (5/5), done. 
Writing objects: 100% (5/5), 435 bytes | 217.00 KiB/s, done. 
Total 5 (delta 4), reused 0 (delta 0) 
remote: Checking connectivity: 5, done. 
remote: Debug: set branch start @ Wed, Sep 6, 2017 10:12:28 PM 
remote: Debug: set branch end @ Wed, Sep 6, 2017 10:12:28 PM 
remote: GIT pull master on live server... 
remote: Debug: cd start @ Wed, Sep 6, 2017 10:12:28 PM 
remote: Debug: cd end @ Wed, Sep 6, 2017 10:12:28 PM 
remote: Debug: unset git_dir start @ Wed, Sep 6, 2017 10:12:28 PM 
remote: Debug: unset git_dir end @ Wed, Sep 6, 2017 10:12:28 PM 
remote: Debug: git pull start @ Wed, Sep 6, 2017 10:12:28 PM 
remote: From //liveserver/GIT/repos/ThisProject 
remote: * branch    master  -> FETCH_HEAD 
remote: 6434be6e..f6c6e04d master  -> origin/master 
remote: Updating 6434be6e..f6c6e04d 
remote: Fast-forward 
remote: applications/the_changed_file.php | 2 +- 
remote: 1 file changed, 1 insertion(+), 1 deletion(-) 
remote: Debug: git pull end @ Wed, Sep 6, 2017 10:13:14 PM 
remote: Done! 
To //liveserver/GIT/repos/ThisProject.git 
    6434be6e..f6c6e04d master -> master 

우리는 완전히 우리가 그것을 할 때 걸리는 시간의 속도에 가깝게 속도를 높이려면이 옵션을 얻을 수있는 방법에 난처한 상황에 빠진 것 : 타임 스탬프에 대해 설정 디버깅

,이 무슨의 예입니다 라이브 서버에서 git pull을 직접 실행하십시오. 이 문제를 해결하기 위해 우리는 무엇을 할 수 있습니까?

우리는 개발자 서버와 라이브 서버에서 Windows 서버에 힘내라를 사용하고 있습니다.

+0

라이브 서버에 사용되는 후크는 무엇입니까? 수신 후크입니까? 후크의 대본을 보여줄 수 있습니까? –

+0

이 .... 후받을 후크입니다! '# 이 oldrev NEWREV의 refname 지점 = $ 읽기/빈/SH {refname 번호의 심판/헤드 /} 경우 [ "$ 지점"== "master"]; 는 \t CD // liveserver/SMBWindowsShare/ThisProject \t 해제 GIT_DIR \t 디버그 에코 : 자식이 시작 끌어 @ "$ (날짜)" \t 자식 끌어 오기 원산지 마스터 번호를이 45+ 초 \t 디버그 에코 걸리는 것입니다 : git pull end @ "$ (date)" \t 에코 완료! fi exit; ' – kenneth

+0

post-receive 훅 스크립트의 일부를 변경하기위한 답을 추가했습니다 (대신'unset GIT_DIT'와'git pull origin master'). 시도를 해보고 몇 초가 걸리는 지 확인할 수 있습니다. –

답변

0

우리의 문제는 라이브 서버에서 git pull을 수행하는 데 약 45 초가 걸리지 만 실제 서버에서 git pull을 수동으로 수행하면 거의 즉각적입니다.

훅 그것이 텍스트 파일

#!/bin/bash 
env>envs.txt 

에서 실행 그리고 당신이에 자신에게 명령을 실행 할 때 당신이보고있는 하나 그 비교 될 때가 가지고있는 환경 변수 저장되어 있는지 확인합니다 서버 :

set>envs2.txt 

두 경우 모두 git config -l에 대해 동일하게 수행하십시오.

아마도 PATH 또는 git 구성의 차이로 인해 한 가지 경우에는 속도가 느려지지만 다른 경로에서는 그렇지 않은 이유를 설명 할 수 있습니다.

또한 latest Git for Windows available을 사용해야합니다.


우리의 문제는, 그 자식 후크 라이브 서버에서 자식 풀을 할 약 45 초 정도 걸립니다,하지만 우리는 수동으로 라이브 서버에 자식 풀을 할 때 거의 순간입니다.

cd //liveserver/SMBWindowsShare/ThisProject 
unset GIT_DIR 
git pull origin master 

공유 드라이브를 통해 자식 작업을하고, 서버에 로컬로에 일을 사이에 큰 차이가 있습니다.

원격 서버 자체에서 실행중인 프로세스에서 가져온 플래그 (예 : tmp 파일 쓰기)를 남겨 두는 것이 가장 좋습니다 : tmp 파일을 볼 때마다 삭제합니다. 자식이 끌어 당겨 당신이 기다릴 수있는 다른 tmp 파일을 씁니다.
그런 식으로 끌어 오기 프로세스가 서버에서 직접 수행됩니다 (원격 지연은 관련되지 않음)

+0

유일한 차이점은 dev 서버에'http.sslbackend = schannel'이 나타나고 라이브 서버에는 나타나지 않는다는 것입니다. 그 밖의 모든 것은 동일합니다. – kenneth

+0

@kenneth OK. 나는 가능한 대안으로 나의 대답을 편집했다. – VonC

+0

당신이 말하는 것은 로컬 푸시가 아니므로 지연이있을 것입니다. 그러나 동일한 정확한 명령을 실행하여 dev 서버가 (라이브 서버가있는 곳에서 살고있는) 서버에서 끌어 올리면 거의 동시에 일어나는. 따라서 네트워크 지연은 없습니다. – kenneth

0

변경 내용을 라이브 서버에 적용한 후 라이브 서버에서 개발 서버로 변경 내용을 적용하려면 수신 후 부분 if 조건 하에서 "$BRANCH" == "master" 조건을 만족하는 후크 스크립트.아래와 같이 변경된 부분 :

git --work-tree=/path/to/development/server --git-dir=/path/to/live/server pull origin master 

참고 : 취소 관련 역사를 가지고 개발 서버 경우 살, 대신 git checkout -f를 사용할 수 있습니다.