ฉันต้องการทราบว่ามีที่เก็บข้อมูลระยะไกลหรือไม่ นี่คือสิ่งที่ฉันมาด้วย:
git ls-remote -h "$REPO_URL" &> /dev/null
มีวิธีที่ดีกว่านี้ไหม?
ฉันต้องการทราบว่ามีที่เก็บข้อมูลระยะไกลหรือไม่ นี่คือสิ่งที่ฉันมาด้วย:
git ls-remote -h "$REPO_URL" &> /dev/null
มีวิธีที่ดีกว่านี้ไหม?
คำตอบ:
ฉันคิดว่าgit ls-remote
คำสั่งนั้นถูกสร้างขึ้นมาเพื่อจุดประสงค์นั้น
ถ้าคุณใช้อาร์กิวเมนต์คุณสามารถข้ามการส่งออกไปยัง--exit-code
null
มันจะส่งคืนบางอย่างเฉพาะในกรณีที่เกิดข้อผิดพลาด
นอกจากนี้คุณสามารถใช้-h
อาร์กิวเมนต์เพื่อแสดงเฉพาะการอ้างอิงหัวเท่านั้น
git ls-remote --exit-code -h "$REPO_URL"
-h
เป็นความคิดที่ดี อย่างไรก็ตาม--exit-code
ไม่ใช่ทางเลือกที่เหมาะสมที่นี่ หน้า man พูดว่า: Exit with status "2" เมื่อไม่พบ refs ที่ตรงกันใน repository ระยะไกล ซึ่งหมายความว่าgit ls-remote --exit-code "$REPO_URL"
จะล้มเหลวสำหรับ repo git init
ว่างเปล่าที่มีเพียงแค่เริ่มต้นได้ด้วย
คุณสามารถ จำกัด เอาท์พุทให้แคบลงโดยใช้สิ่งที่ชอบ git ls-remote "$REPO_URL" HEAD
TL; DR:
git ls-remote
เป็นวิธีที่นี่เป็นฟังก์ชั่นเปลือกพร้อมสำหรับการเข้าถึงที่รวดเร็ว:
## 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
}
การใช้งาน:
if git-remote-url-reachable "$url"; then
## code
fi
มันทำอะไรอยู่?
นี่เป็นเพียงความสะดวกในการรวบรวมข้อคิดเห็น / โซลูชันทั้งหมดที่ระบุไว้ก่อนหน้านี้ด้วย tweaks ขนาดเล็กฟังก์ชั่นพร้อมสำเนา bash copy-paste และตัวอย่างรหัสการใช้งานเพื่อให้ชัดเจน คุณจะทราบว่า:
จะ จำกัด การส่งออกเป็นที่อ้างอิงการตรวจสอบน่าจะดำรงอยู่ในฐานะgit
จะยังคงทางออกด้วยข้อผิดพลาดในระดับ 0 ในโทษที่ไม่มีคู่ ความแตกต่างเฉพาะที่นี่ก็คือว่ามีการส่งออกน้อยในการถ่ายโอนในเครือข่ายเมื่อเทียบกับขอHEAD
(และมากน้อยกว่าไม่ได้ขอเตะหรือแม้กระทั่งการ จำกัด หัวเท่านั้น) และเรื่องนี้ก็เป็นผลผลิตน้อยที่จะโยนใน/dev/null
( แต่นี้ อันสุดท้ายคือการใช้เวลาเพียงเล็กน้อย)
การตรวจสอบการอ้างอิงทำให้ชัดเจนว่าเรากำลังตรวจสอบการมีอยู่ของสิ่งนี้อาจช่วยได้หากคุณต้องการสุภาพกับผู้ดูแลระบบของเซิร์ฟเวอร์ที่คุณกำลังตรวจสอบและให้โอกาสพวกเขาเข้าใจว่าทำไมพวกเขาได้รับโพรบเหล่านี้
/dev/null
) ควรมีขนาดค่อนข้างเล็ก