2013-06-12 2 views
21

다른 여러 'clone on git hangs'질문을 읽었지만 내 환경과 세부 사항에 일치하는 질문은 없습니다. Cygwin (msys git은 옵션이 아님)에서 빌드 된 git를 사용하여 SSH를 통해 Linux 호스트의 저장소를 복제합니다.git-upload-pack (git clone 동안)이 왜 멈출까요?

git clone [email protected]:repo 

다른 플랫폼의 동일한 호스트에 대해 테스트했는데 정상적으로 작동하지만이 Windows 컴퓨터에서는 복제본이 무기한 중지됩니다. 나는 GIT_TRACE=1를 설정하고 문제가이 명령처럼 보이는 :

'ssh' '[email protected]' 'git-upload-pack '\''repo'\''' 

내 SSH 키가 올바르게 설정되어 잘 작동 ssh [email protected].

... 
003dbbd3db63763922ad75bbeefa3811dce001576851 refs/tags/start 
0000 

는 그 다음 내가 그것을 죽이는 전에 기다렸다 최장 인 20 + 분 동안 중단 : 나는 명령을 실행하면,이 같은 종료 출력의 무리를 얻을.

서버에는 OpenSSH 5.9p1의 Git 1.7.11.7이 있고 클라이언트에는 OpenSSH 6.1p1의 Git 1.7.9가 있습니다.

git-upload-pack 출력의 끝으로 가정됩니까? 이것은 힘내 또는 내 구성의 버그인가?

+0

복제본을 linux/mac에서 windows PC로 복사하고 "사용"했습니까? 아마도 창문 (대소 문자를 구분하지 않음, 문자 인코딩, ...)을 사용하는 일부 git 문제가 그 이유이며,이 문제를 추적하는 데 도움이 될 수 있습니다. – mnagel

+1

이것은'git-upload-pack'에서 예상됩니다. 그것은 당신 (당신의 git 클라이언트)이 당신이 무언가를 요구하고, 당신이 원하는 것과 당신이 가지고있는 것을 말해주는 협상을 기다리고 있습니다. 문제 해결을 위해 다른 git 클라이언트를 사용할 수 없습니까? –

+0

@EdwardThomson 더 이상 그 환경에 액세스 할 수 없지만, 다른 git 클라이언트를 사용할 수있는 옵션이 없습니다. 서버와 클라이언트 모두 소스에서 컴파일되었으므로 플랫폼 특정 코드 및 종속성에서 소개 된 경우를 제외하고는 동작에 차이가 없어야합니다. – DNS

답변

0

우리는 비슷한 문제에 봉착했습니다. 우리는이 프로젝트에 많은 바이너리 파일을 체크인했습니다 (이 프로젝트의 지난 1.5 년 동안 여러 버전이 있음). 그래서 우리는 이것이 원인이라고 생각했습니다.

이 이론을 지원하기 위해이 동작을 나타내지 않는 다른 코드 기반을 사용합니다 (이진 파일과 버전이 많지 않음).

설정 : Linux의 Git 설정, T1 회선을 통한 런던과 인도 간의 사이트 간 VPN.

+0

내 레포에는 많은 바이너리 개체가 있었지만, 제 경우에는 복제본이 기가비트 로컬 링크를 넘었습니다. 동일한 저장소의 다른 플랫폼 (Mac, Linux, Solaris에서 테스트 됨)에서 복제하는 데는 대략 몇 분이 걸렸습니다. 그래서 Windows에서 git이 다른 곳에서 사용하는 나의 경험이 아닌 어떤 이유로 인해 크기가 여러 배 더 느리다면 문제는 아마도 repo 크기 나 내용과 관련이 없습니다. – DNS

2

곧 출시 될 git1.8.5 (2013 년 4 월)에 더 많은 스마트 HTTP 프로토콜이 문서화됩니다.
commit 4c6fffe2ae3642fa4576c704e2eb443de1d0f8a1Shawn O. Pearce입니다.

해당 세부 설명서를 사용하면 git 클라이언트와 서버간에 수행 된 웹 요청을 모니터링하고 그 내용이 아래에 설명 된 내용을 준수하는지 확인할 수 있습니다.

이렇게하면 서비스가 중단되는 위치를 정확하게 찾아 낼 수 있습니다.

  • '$GIT_URL/info/refs?service=git-upload-pack'와 'Smart Service git-upload-pack "

    • 클라이언트가 먼저 수행해야 심판 발견 :


      파일 Documentation/technical/http-protocol.txt는 주장한다.

      C: POST $GIT_URL/git-upload-pack HTTP/1.0 
      S: 200 OK 
      S: Content-Type: application/x-git-upload-pack-result 
      S: Cache-Control: no-cache 
      S: 
      S: ....ACK %s, continue 
      S: ....NAK 
      
    • 클라이언트는 캐시 된 응답을 재사용하거나 재확인해서는 안됩니다.

    • 서버는 응답 캐싱을 방지하기 위해 충분한 캐시 제어 헤더 을 포함해야합니다.
    • 서버는 여기서 정의 된 모든 기능을 지원해야합니다.
    • 클라이언트는 요청 본문에 적어도 하나의 'want'명령을 보내야합니다.
    • 클라이언트는 클라이언트가 "allow-tip-sha-in-one-in-one"기능을 광고하지 않으면 ref 발견을 통해 얻은 응답에 나타나지 않는 'want'명령의 ID를 참조해서는 안됩니다.
  • "negociation" algorithm

    (c) Send one $GIT_URL/git-upload-pack request: 
    C: 0032want <WANT #1>............................... 
    
0

내가 TMUX에서 창 제목을 설정하기 위해 내 ssh를 설정이 같은 일부 재즈를 추가 한 후 나는이 같은 문제가되었다

Host * 
PermitLocalCommand yes 
LocalCommand if [[ $TERM == screen* ]]; then printf "\033k%h\033\\"; fi 

고정 된 내 자식 제거.

0

다른 사람들에게 도움이되는 나를 위해 일했습니다.

git 원격 URL을 확인하십시오. 잘못된 URL 유형을 사용하는 경우 git-upload-pack과 (와) 연관 될 수 있습니다. 리모컨의 URL을 [email protected]:에서 https://github.com/으로 변경하십시오.