2013-01-23 33 views
7

Tôi đang cố gắng đẩy một số thay đổi, nhưng git push bị treo. Khi tôi chạy git push, tôi thấy không có đầu ra, và dường như không có gì xảy ra. Không có hoạt động nào trong số top và không có dấu hiệu gì xảy ra.git push treo trên (câm) https, sau khi HTTP/1.1 100 Tiếp tục

Tôi không kiểm soát dịch vụ lưu trữ git. Tôi đang sử dụng URL HTTPS. Tôi tin rằng dịch vụ lưu trữ đang sử dụng HTTPS câm, không phải giao thức "thông minh-HTTP" của git. Về phía khách hàng, tôi sử dụng Mac OS X và tôi đã cài đặt git 1.8.1.1 thông qua Homebrew (nhưng sử dụng phiên bản git có trong các công cụ dòng lệnh của Xcode dường như không tạo nên sự khác biệt). Đăng xuất và đăng nhập lại có vẻ không hữu ích. Tôi có thể kéo và đẩy dịch vụ lưu trữ/kho lưu trữ này từ một hộp Linux khác.

Dưới đây là một số đầu ra gỡ lỗi hiển thị số git push treo sau khi máy khách đưa ra yêu cầu PROPFIND, nhận phản hồi HTTP/1.1 100 Continue từ máy chủ và sau đó không có gì xảy ra: nó chỉ bị kẹt.

Làm cách nào để làm việc này? Có bất kỳ bước khắc phục sự cố nào mà tôi có thể thử không?

$ 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 

Tôi không có strace trên máy Mac OS X của tôi, và tôi không thể tìm ra cách để sử dụng dtruss để xem những gì hệ thống các cuộc gọi nó được treo trên vì dtruss đòi hỏi tôi phải có gốc, và sau đó git push sẽ hoạt động khác nhau.

Cập nhật: Tôi đã sao chép điều này trên một máy Linux có git 1.8.1.4 và với strace. Đường chạy cho thấy một cái gì đó như sau trước khi nó treo:

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... 

Vì vậy, có vẻ như đang chờ đợi để nhận được thứ gì đó từ máy chủ.

Ngoài ra, tôi đã thử một dấu vết tương tự với GIT_CURL_VERBOSE=1 git push -v trên hộp Linux cũ hơn chạy git 1.7.4.4 và bắt đầu bằng cùng một tiền tố và sau đó tiếp tục từ đó. Trên máy bị hỏng với git mới hơn:

$ 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 

trên máy cũ với git cũ, nơi đó là tất cả làm việc:

$ 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 

Nhìn vào toàn bộ dấu vết trên cả hai máy, tôi không thể thấy bất kỳ sự khác biệt nào về những gì được gửi trong yêu cầu PROPFIND có vấn đề (PROPFIND thứ 2): cả hai yêu cầu đều giống nhau, ngoại trừ tiêu đề User-Agent:.

+0

' cjc343

+0

Xin cảm ơn, @ cjc343. Bất kỳ mẹo nào về cách khắc phục sự cố thêm? Tôi đang sử dụng '~/.netrc' để xác thực và tôi đã xác nhận rằng' ~/.netrc' của tôi giống hệt với giá trị của nó trên một máy (Linux) khác mà tôi không gặp vấn đề gì khi đẩy. Ngoài ra tôi có thể kéo thành công từ máy này, mà cũng sẽ yêu cầu thông tin xác thực - vì vậy tất cả đều rất khó hiểu. –

+0

Chắc chắn là lạ ... thật không may là tôi không quen với git qua http/s vì tôi luôn sử dụng ssh để xác thực. Trừ khi các điều khoản kéo vô tình mở ra, nó không có nghĩa là bạn không thể đẩy và ném hầu hết các khả năng, như quyền cho '.netrc' quá mở hoặc một tên người dùng được bao gồm trong điều khiển từ xa (mà tôi nghĩ sẽ hiển thị lên trên nếu nó là trường hợp), ra ngoài cửa sổ. Nếu bạn thêm một điều khiển từ xa có tên người dùng được bao gồm, thì git có nhắc bạn nhập mật khẩu khi đang đẩy nó không? Hy vọng rằng một người khác có ý tưởng tốt hơn về những gì đang xảy ra ... – cjc343

Trả lời

2

Tôi gặp vấn đề với cùng một triệu chứng (quá trình treo tại HTTP/1.1 100 Continue).

Tôi đã tìm thấy một cam kết giải quyết vấn đề cho tôi: http-push.c: make CURLOPT_IOCTLDATA a usable pointer, có sẵn trong Phiên bản GIT v2.0.3.

Rõ ràng người dùng không được xác thực chính xác trên máy chủ ngay cả khi có vẻ như vậy từ giao tiếp. Vấn đề là lạ, bởi vì cho bạn nó xuất hiện trên một máy nhưng không phải trên một phiên bản GIT khác được cài đặt, cho tôi GIT vừa ngừng hoạt động trong khoảng thời gian một tháng và tôi không thể nói nguyên nhân là gì.

Hoặc nếu có thể, hãy sử dụng nhà cung cấp dịch vụ GIT cho phép các giao thức khác: SSH hoặc HTTPS, chúng được sửa lỗi tốt hơn nhiều.


Đối với cửa sổ người dùng, đây là mất của tôi trên git-http-push 2.1.0-rc2 xây dựng (dựa trên msysGit project instructions)

Để backport để MSysGit cài đặt, giải nén nó và trong thư mục cài đặt MSysGit sao chép vào/ghi đè lên libexec\git-core\git-http-push.exe.

Sự cố đã được báo cáo here.

Cập nhật

mới nhất msysGit (Git-1.9.4-preview20140815) chứa bugfix backported.