Câu trả lời:
Tôi nghĩ rằng git ls-remote
lệnh được thực hiện khá nhiều cho mục đích đó.
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"
-h
là một ý tưởng tuyệt vời Tuy nhiên, --exit-code
khô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
.
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
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ứ.
/dev/null
) khá nhỏ.