git“ ping”: ตรวจสอบว่ามีที่เก็บข้อมูลระยะไกลอยู่หรือไม่


76

ฉันต้องการทราบว่ามีที่เก็บข้อมูลระยะไกลหรือไม่ นี่คือสิ่งที่ฉันมาด้วย:

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

มีวิธีที่ดีกว่านี้ไหม?


4
ดูเหมือนจะเป็นทางเลือกที่ดี ค่าใช้จ่ายของ "งานพิเศษ" ของการดึงและจัดรูปแบบรายการอ้างอิง (ซึ่งถูกส่งไปยัง/dev/null) ควรมีขนาดค่อนข้างเล็ก
Chris Johnsen

คำตอบควรเป็น: ไม่ไม่มีวิธีที่ดีกว่า
Timo

คำตอบ:


70

ฉันคิดว่าgit ls-remoteคำสั่งนั้นถูกสร้างขึ้นมาเพื่อจุดประสงค์นั้น


ใช่ดูเหมือนว่าจะใช้งานได้ แต่คุณช่วยกรุณาอธิบายและบอกว่านี่ 100% ที่ฉันสามารถโคลน repo นั้นได้
ไหม

15

ถ้าคุณใช้อาร์กิวเมนต์คุณสามารถข้ามการส่งออกไปยัง--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ว่างเปล่าที่มีเพียงแค่เริ่มต้นได้ด้วย
Jo Liss

3

คุณสามารถ จำกัด เอาท์พุทให้แคบลงโดยใช้สิ่งที่ชอบ git ls-remote "$REPO_URL" HEAD


มันแขวนตลอดไป
Timo

1
@Timo ดังนั้นคุณอาจมีเซิร์ฟเวอร์ที่ไม่ตอบสนองหรือการเชื่อมต่อของคุณหรือไคลเอ็นต์ git ที่ใช้งานไม่ได้ ตัวอย่างเช่นพอร์ตเครือข่ายถูกกรอง การสืบสวนเพิ่มเติมนั้นคล้ายกับสิ่งที่เกิดขึ้นเมื่อ ping ของคุณไม่ตอบสนอง :) ตัวอย่างเช่นคุณสามารถลองตรวจสอบว่าคุณได้รับการเชื่อมต่อที่สร้างผ่านnetcatหรือOpenSSL s_clientหรือtracepath
ony

0

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( แต่นี้ อันสุดท้ายคือการใช้เวลาเพียงเล็กน้อย)

  • การตรวจสอบการอ้างอิงทำให้ชัดเจนว่าเรากำลังตรวจสอบการมีอยู่ของสิ่งนี้อาจช่วยได้หากคุณต้องการสุภาพกับผู้ดูแลระบบของเซิร์ฟเวอร์ที่คุณกำลังตรวจสอบและให้โอกาสพวกเขาเข้าใจว่าทำไมพวกเขาได้รับโพรบเหล่านี้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.