หากนี่เป็นปัญหาของไฟร์วอลล์ที่ปิดกั้นพอร์ต git: โปรโตคอล (9418) คุณควรทำการเปลี่ยนแปลงที่ถาวรมากขึ้นเพื่อที่คุณจะได้ไม่ต้องจดจำคำสั่งที่แนะนำโดยโพสต์อื่น ๆ ของ git repo ทุกตัว
วิธีการแก้ปัญหาด้านล่างนี้ยังใช้งานได้กับ submodules ซึ่งอาจใช้โปรโตคอล git:
เนื่องจากข้อความคอมไพล์ไม่ได้ชี้ไปยังไฟร์วอลล์ที่ปิดกั้นพอร์ต 9418 ทันทีให้ลองวินิจฉัยว่าเป็นปัญหาจริง
การวินิจฉัยปัญหา
ข้อมูลอ้างอิง: https://superuser.com/q/621870/203918และhttps://unix.stackexchange.com/q/11756/57414
มีเครื่องมือหลายอย่างที่เราสามารถใช้เพื่อตรวจสอบว่าไฟร์วอลล์เป็นสาเหตุของปัญหาของเราหรือไม่ - ใช้ระบบใดก็ตามที่ติดตั้งในระบบของคุณ
# Using nmap
# A state of "filtered" against port 9418 (git) means
# that traffic is being filtered by a firewall
$ nmap github.com -p http,git
Starting Nmap 5.21 ( http://nmap.org ) at 2015-01-21 10:55 ACDT
Nmap scan report for github.com (192.30.252.131)
Host is up (0.24s latency).
PORT STATE SERVICE
80/tcp open http
9418/tcp filtered git
# Using Netcat:
# Returns 0 if the git protocol port IS NOT blocked
# Returns 1 if the git protocol port IS blocked
$ nc github.com 9418 < /dev/null; echo $?
1
# Using CURL
# Returns an exit code of (7) if the git protocol port IS blocked
# Returns no output if the git protocol port IS NOT blocked
$ curl http://github.com:9418
curl: (7) couldn't connect to host
ตกลงดังนั้นตอนนี้เราได้พิจารณาแล้วว่าพอร์ต git ของเราถูกบล็อกโดยไฟร์วอลล์เราจะทำอะไรได้บ้าง อ่านต่อ :)
การเขียนซ้ำ URL พื้นฐาน
Git มีวิธีการเขียน URL git config
ซ้ำโดยใช้ ออกคำสั่งต่อไปนี้:
git config --global url."https://".insteadOf git://
ตอนนี้ราวกับมีเวทมนตร์คำสั่งคอมไพล์ทั้งหมดจะดำเนินการเปลี่ยนตัวของgit://
การhttps://
คำสั่งนี้เปลี่ยนแปลงอะไรบ้าง?
ดูการกำหนดค่าทั่วโลกของคุณโดยใช้:
git config --list
คุณจะเห็นบรรทัดต่อไปนี้ในผลลัพธ์:
url.https://.insteadof=git://
คุณสามารถดูว่าไฟล์นี้มีลักษณะอย่างไรโดยดู~/.gitconfig
ที่ตอนนี้คุณควรเห็นว่ามีการเพิ่มสองบรรทัดต่อไปนี้:
[url "https://"]
insteadOf = git://
ต้องการการควบคุมมากขึ้น?
เพียงใช้ URL ที่สมบูรณ์ / เฉพาะเจาะจงมากขึ้นในการแทนที่ ตัวอย่างเช่นหากต้องการให้ GitHub URL ใช้ https: // แทน git: // คุณสามารถใช้สิ่งต่อไปนี้:
git config --global url."https://github".insteadOf git://github
คุณสามารถรันคำสั่งนี้หลายครั้งโดยใช้การแทนที่ที่แตกต่างกัน อย่างไรก็ตามในกรณีที่ URL ตรงกับการแทนที่หลายครั้งการจับคู่ที่ยาวที่สุด "ชนะ" จะมีการแทนที่เพียงครั้งเดียวต่อ URL
การเปลี่ยนแปลงทั้งระบบสำหรับ Sysadmins
หากคุณเป็น Linux Sysadmin และคุณไม่ต้องการให้ผู้ใช้ต้องผ่านความเจ็บปวดข้างต้นคุณสามารถทำการเปลี่ยนแปลงการตั้งค่า git ทั่วทั้งระบบได้อย่างรวดเร็ว
เพียงแก้ไขหรือเพิ่มเนื้อหาต่อไปนี้/etc/gitconfig
และ voila ผู้ใช้ของคุณไม่ต้องกังวลเกี่ยวกับข้อใด ๆ ข้างต้น:
[url "https://"]
insteadOf = git://