git trên ping ping: kiểm tra nếu kho lưu trữ từ xa tồn tại


76

Tôi muốn biết liệu một kho lưu trữ từ xa có tồn tại không. Đây là những gì tôi nghĩ ra:

git ls-remote -h "$REPO_URL" &> /dev/null

Có cách nào tốt hơn không?


4
Có vẻ như một sự lựa chọn tốt. Chi phí hoạt động của các công việc phụ của Google, việc tìm nạp và định dạng danh sách các ref (sau đó được gửi tới /dev/null) khá nhỏ.
Chris Johnsen

Câu trả lời nên là: Không, không có cách nào tốt hơn.
Timo

Câu trả lời:


70

Tôi nghĩ rằng git ls-remotelệnh được thực hiện khá nhiều cho mục đích đó.


vâng, điều này có vẻ hiệu quả, nhưng bạn có thể, xin vui lòng, cung cấp một số lời giải thích và cho biết nếu 100% này tôi có thể sao chép repo đó
vladkras

15

Nếu bạn sử dụng --exit-codeđối số, bạn có thể bỏ qua việc gửi đầu ra tới null. Nó sẽ trả về một cái gì đó chỉ trong trường hợp có lỗi.

Ngoài ra, bạn có thể sử dụng -hđối số để chỉ hiển thị các tham chiếu đầu.

git ls-remote --exit-code -h "$REPO_URL"

-hlà một ý tưởng tuyệt vời Tuy nhiên, --exit-codekhông phải là lựa chọn đúng đắn ở đây. Trang man nói: Thoát với trạng thái "2" khi không tìm thấy giới thiệu phù hợp trong kho lưu trữ từ xa. Điều này có nghĩa là git ls-remote --exit-code "$REPO_URL"sẽ thất bại cho một repo trống chỉ mới được khởi tạo git init.
Jo Liss

3

Bạn có thể thu hẹp đầu ra bằng cách sử dụng một cái gì đó như git ls-remote "$REPO_URL" HEAD


Nó treo mãi mãi.
Timo

1
@Timo, sau đó bạn có thể có máy chủ không phản hồi hoặc kết nối của bạn hoặc máy khách git bị hỏng. Ví dụ cổng mạng được lọc. Các nghiên cứu sâu hơn tương tự như những gì xảy ra khi ping của bạn không phản hồi :). Ví dụ: bạn có thể thử kiểm tra xem bạn đã thiết lập kết nối qua netcat hay openssl s_client hoặc tracepath .
ony

0

TL; DR:

git ls-remote Đây là cách, đây là một chức năng sẵn sàng để truy cập nhanh:

  ## Returns errlvl 0 if $1 is a reachable git remote url 
  git-remote-url-reachable() {
      git ls-remote "$1" CHECK_GIT_REMOTE_URL_REACHABILITY >/dev/null 2>&1
  }

Sử dụng:

if git-remote-url-reachable "$url"; then
   ## code
fi

Nó đang làm gì vậy

Đây chỉ là một sự kết hợp thuận tiện của tất cả các ý kiến ​​/ giải pháp đã nêu trước đây với một số điều chỉnh nhỏ, chức năng sẵn sàng sao chép bash và mẫu mã sử dụng để làm cho nó rõ ràng. Bạn sẽ lưu ý rằng:

  • nó giới hạn đầu ra vì tham chiếu được kiểm tra có lẽ không tồn tại, vì git vẫn sẽ thoát với mức lỗi 0 trên tham chiếu không khớp . Sự khác biệt duy nhất ở đây là có ít đầu ra để chuyển trên mạng so với yêu cầu HEAD(và ít hơn nhiều so với việc không yêu cầu giới thiệu hoặc thậm chí giới hạn chỉ các đầu), và đây cũng là đầu ra ít hơn để truyền vào /dev/null(nhưng điều này cũng ít hơn cuối cùng là mất thời gian không đáng kể

  • ref đã kiểm tra cho thấy rõ chúng tôi đang tìm kiếm sự tồn tại , điều này có thể giúp ích nếu bạn muốn lịch sự với các quản trị viên của máy chủ mà bạn đang thăm dò và cho họ cơ hội hiểu tại sao họ nhận được các đầu dò này nếu họ giám sát mọi thứ.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.