2013-01-23 1 views
7

일부 변경을 시도하지만 git push이 중단됩니다. git push을 실행할 때 출력이 없으며 아무 것도 일어나지 않는 것 같습니다. top에는 아무런 활동이없고 아무 일도 일어나지 않습니다.HTTP/1.1 이후에 git push (벙어리) https가 멈추는 경우 계속

나는 자식 호스팅 서비스를 제어하지 않습니다. HTTPS URL을 사용하고 있습니다. 나는 호스팅 서비스가 git의 "smart-HTTP"프로토콜이 아니라 멍청한 HTTPS를 사용하고 있다고 생각한다. 클라이언트 측에서는 Mac OS X을 사용하고 Homebrew를 통해 1.8.1.1 git을 설치했습니다 (그러나 Xcode의 명령 행 도구에 포함 된 git 버전을 사용하면 차이가없는 것 같습니다). 로그 아웃하고 다시 로그인하는 것은 도움이되지 않습니다. 나는 다른 리눅스 박스에서이 호스팅 서비스/저장소로 끌어 당길 수있다.

다음은 클라이언트가 PROPFIND 요청을 발행하고 서버에서 HTTP/1.1 100 Continue 응답을 얻은 후 git push이 걸린 일부 디버깅 출력입니다. 그러면 아무 반응이 없습니다. 방금 막혔습니다.

어떻게 작동합니까? 시도 할 수있는 문제 해결 단계가 있습니까?

$ GIT_CURL_VERBOSE=1 git push -v 
Pushing to https://secure2.svnrepository.com/redacted/redacted/ 
* About to connect() to secure2.svnrepository.com port 443 (#0) 
* Trying 67.228.18.88... 
* Connected to secure2.svnrepository.com (67.228.18.88) port 443 (#0) 
* Connected to secure2.svnrepository.com (67.228.18.88) port 443 (#0) 
* SSL connection using DHE-RSA-AES256-SHA 
* Server certificate: 
* subject: C=US; OU=Domain Control Validated; CN=secure2.svnrepository.com 
* start date: 2012-01-09 16:16:59 GMT 
* expire date: 2015-02-09 02:52:45 GMT 
* subjectAltName: secure2.svnrepository.com matched 
* issuer: O=AlphaSSL; CN=AlphaSSL CA - G2 
* SSL certificate verify ok. 
> GET /redacted/redacted/info/refs?service=git-receive-pack HTTP/1.1 
User-Agent: git/1.8.1.1 
Host: secure2.svnrepository.com 
Accept: */* 
Accept-Encoding: gzip 
Pragma: no-cache 

< HTTP/1.1 401 Authorization Required 
< Date: Wed, 23 Jan 2013 03:29:36 GMT 
< Server: Apache/2.2.3 (Red Hat) 
< WWW-Authenticate: Basic realm="redacted" 
< Content-Length: 493 
< Content-Type: text/html; charset=iso-8859-1 
< 
* Ignoring the response-body 
* Connection #0 to host secure2.svnrepository.com left intact 
* Issue another request to this URL: 'https://secure2.svnrepository.com/redacted/redacted/info/refs?service=git-receive-pack' 
* Re-using existing connection! (#0) with host (nil) 
* Connected to (nil) (67.228.18.88) port 443 (#0) 
* Server auth using Basic with user 'redacted' 
> GET /redacted/redacted/info/refs?service=git-receive-pack HTTP/1.1 
Authorization: Basic redacted= 
User-Agent: git/1.8.1.1 
Host: secure2.svnrepository.com 
Accept: */* 
Accept-Encoding: gzip 
Pragma: no-cache 

< HTTP/1.1 200 OK 
< Date: Wed, 23 Jan 2013 03:29:36 GMT 
< Server: Apache/2.2.3 (Red Hat) 
< Last-Modified: Wed, 23 Jan 2013 03:00:40 GMT 
< ETag: "143802e-3b-e6374600" 
< Accept-Ranges: bytes 
< Content-Length: 59 
< Content-Type: text/plain; charset=UTF-8 
< 
* Connection #0 to host (nil) left intact 
* Re-using existing connection! (#0) with host (nil) 
* Connected to (nil) (67.228.18.88) port 443 (#0) 
* Server auth using Basic with user 'redacted' 
> GET /redacted/redacted/HEAD HTTP/1.1 
Authorization: Basic redacted= 
User-Agent: git/1.8.1.1 
Host: secure2.svnrepository.com 
Accept: */* 
Accept-Encoding: gzip 
Pragma: no-cache 

< HTTP/1.1 200 OK 
< Date: Wed, 23 Jan 2013 03:29:36 GMT 
< Server: Apache/2.2.3 (Red Hat) 
< Last-Modified: Wed, 16 Jan 2013 21:05:31 GMT 
< ETag: "d1802c-17-3d0d7cc0" 
< Accept-Ranges: bytes 
< Content-Length: 23 
< Content-Type: text/plain; charset=UTF-8 
< 
* Connection #0 to host (nil) left intact 
* About to connect() to secure2.svnrepository.com port 443 (#0) 
* Trying 67.228.18.88... 
* Connected to secure2.svnrepository.com (67.228.18.88) port 443 (#0) 
* Connected to secure2.svnrepository.com (67.228.18.88) port 443 (#0) 
* SSL connection using DHE-RSA-AES256-SHA 
* Server certificate: 
* subject: C=US; OU=Domain Control Validated; CN=secure2.svnrepository.com 
* start date: 2012-01-09 16:16:59 GMT 
* expire date: 2015-02-09 02:52:45 GMT 
* subjectAltName: secure2.svnrepository.com matched 
* issuer: O=AlphaSSL; CN=AlphaSSL CA - G2 
* SSL certificate verify ok. 
> PROPFIND /redacted/redacted/ HTTP/1.1 
User-Agent: git/1.8.1.1 
Host: secure2.svnrepository.com 
Accept: */* 
Depth: 0 
Content-Type: text/xml 
Content-Length: 181 
Expect: 100-continue 

< HTTP/1.1 100 Continue 
* We are completely uploaded and fine 
< HTTP/1.1 401 Authorization Required 
< Date: Wed, 23 Jan 2013 03:29:37 GMT 
< Server: Apache/2.2.3 (Red Hat) 
< WWW-Authenticate: Basic realm="redacted" 
< Content-Length: 493 
< Content-Type: text/html; charset=iso-8859-1 
* the ioctl callback returned 0 
< 
* Ignoring the response-body 
* Connection #0 to host secure2.svnrepository.com left intact 
* Issue another request to this URL: 'https://secure2.svnrepository.com/redacted/redacted/' 
* Re-using existing connection! (#0) with host (nil) 
* Connected to (nil) (67.228.18.88) port 443 (#0) 
* Server auth using Basic with user 'redacted' 
> PROPFIND /redacted/redacted/ HTTP/1.1 
Authorization: Basic redacted= 
User-Agent: git/1.8.1.1 
Host: secure2.svnrepository.com 
Accept: */* 
Depth: 0 
Content-Type: text/xml 
Content-Length: 181 
Expect: 100-continue 

< HTTP/1.1 100 Continue 

내 맥 OS X 시스템에 strace이없는, 나는 다음 dtruss 루트로 저를 필요로하기 때문에이 걸려있다 호출 어떤 시스템을 볼 수 dtruss을 사용하는 방법을 알아낼 수없고, git push는 다르게 작동합니다.

업데이트 : git 1.8.1.4 및 strace가있는 Linux 컴퓨터에서이를 재현했습니다. strace를 실행하면 다음과 같은 결과가 표시됩니다.

sendto(4, <redacted>..., 314, 0, NULL, 0) = 314 
recvfrom(4, "\27\3\1\0000", 5, 0, NULL, NULL) = 5 
recvfrom(4, "E\202\271\21\236p\200\346\374\3641\355\t\275\rLi\202T)\326\271l/\351\f\357\2769Jb\22"..., 48, 0, NULL, NULL) = 48 
select(5, [4], [4], [], {0, 729000}) = 1 (out [4], left {0, 728997}) 
poll([{fd=4, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}, {fd=4, events=POLLOUT|POLLWRNORM}], 2, 0) = 1 ([{fd=4, revents=POLLOUT|POLLWRNORM}]) 
select(5, [4], [], [], {0, 729000}) = 0 (Timeout) 
poll([{fd=4, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 0 (Timeout) 
...last 2 lines repeat infinitely... 

따라서 서버에서 무언가를받을 것으로 예상됩니다.

또한 git 1.7.4.4를 실행하는 구형 Linux 상자에서 GIT_CURL_VERBOSE=1 git push -v과 비슷한 추적을 시도했으며 동일한 접두어로 시작한 다음 계속됩니다.

$ grep '^> [A-Z]' git-1.8.1.1-trace.stderr 
> GET /redacted/redacted/info/refs?service=git-receive-pack HTTP/1.1 
> GET /redacted/redacted/info/refs?service=git-receive-pack HTTP/1.1 
> GET /redacted/redacted/HEAD HTTP/1.1 
> PROPFIND /redacted/redacted/ HTTP/1.1 
> PROPFIND /redacted/redacted/ HTTP/1.1 

기존의 시스템에서이 모든 작업의 ​​이전 자식과 : 새로운 자식과 깨진 시스템에서 두 시스템에서 전체 추적을 보면

$ grep '^> [A-Z]' git-1.7.4.4-trace.stderr 
> GET /g_wagner/c79-s13/info/refs?service=git-receive-pack HTTP/1.1 
> GET /g_wagner/c79-s13/info/refs?service=git-receive-pack HTTP/1.1 
> GET /g_wagner/c79-s13/HEAD HTTP/1.1 
> PROPFIND /g_wagner/c79-s13/ HTTP/1.1 
> PROPFIND /g_wagner/c79-s13/ HTTP/1.1 
> HEAD /g_wagner/c79-s13/info/refs HTTP/1.1 
> HEAD /g_wagner/c79-s13/objects/info/packs HTTP/1.1 
> MKCOL /g_wagner/c79-s13/info/ HTTP/1.1 
> LOCK /g_wagner/c79-s13/info/refs HTTP/1.1 
> GET /g_wagner/c79-s13/objects/info/packs HTTP/1.1 
... 
> UNLOCK /g_wagner/c79-s13/info/refs HTTP/1.1 

, 그럴 수 없어 문제가있는 PROPFIND 요청 (2 차 PROPFIND)에서 전송 된 내용의 차이를 확인하십시오. User-Agent: 헤더를 제외하고 두 요청이 동일하게 표시됩니다.

+0

' cjc343

+0

고마워요, @ cjc343. 더 이상 문제를 해결하는 방법에 대한 팁? 나는 인증을 위해'~/.netrc'을 사용하고 있는데,'~/.netrc'는 다른 리눅스 머신에서의 값과 정확히 동일하다는 것을 확인했습니다. 또한이 컴퓨터에서 성공적으로 가져올 수 있으며 인증 자격 증명도 필요합니다. 그래서 매우 혼란 스럽습니다. –

+0

그것은 확실히 이상한 일입니다. 불행히도 저는 인증을 위해 항상 ssh를 사용했기 때문에 http/s를 통해 git에 익숙하지 않았습니다. 권한을 가져 오지 않으면 실수로 푸시 할 수 없다는 의미가 아닙니다.'.netrc '가 너무 개방되어 있거나 리모컨에 사용자 이름이 포함되어있는 것과 같은 가능성을 대부분 버립니다. 위의 경우 위), 창 밖으로. 사용자 이름이 포함 된 리모컨을 추가하면 밀어 넣을 때 암호를 묻는 메시지가 표시됩니까? 다행스럽게도 다른 사람이 무엇이 잘못 되었는가에 대한 더 나은 아이디어를 가지고 있기를 바랍니다. – cjc343

답변

2

동일한 증상 (프로세스가 HTTP/1.1 100 Continue에 있습니다.)에 문제가 있습니다.

나를 위해 문제를 해결하는 커밋을 발견했습니다 : http-push.c: make CURLOPT_IOCTLDATA a usable pointer, GIT 릴리스 v2.0.3에서 사용할 수 있습니다.

분명히 사용자가 통신에서 그렇게 보이더라도 서버에서 올바르게 인증되지 않았습니다.

GIT 버전이 설치된 다른 컴퓨터가 아니라 하나의 컴퓨터에만 표시되기 때문에 문제가 발생합니다. GIT는 한 달 동안 작동을 멈추었으며 실제로 그 원인을 알 수 없습니다.

다른 프로토콜 (SSH 또는 HTTPS)을 허용하는 GIT 서비스 공급자를 사용할 수도 있습니다. 디버깅이 훨씬 더 효율적입니다. Windows 사용자를위한


, 여기 libexec\git-core\git-http-push.exe을 덮어 /에 복사하여 msysGit 설치에 백 포트를 압축을 풀고 msysGit 설치 폴더에 위해 (msysGit project instructions 기준) git-http-push 2.1.0-rc2 빌드

에 내 걸릴입니다.

이 문제는 here으로보고되었습니다.

업데이트

최신 msysGit (망할 놈의-1.9.4-preview20140815)이 백 포트 버그 수정이 포함되어 있습니다.