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:
.
'
cjc343
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. –
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