หน้านี้จะอธิบายวิธีแก้ปัญหาและแก้ไขปัญหาที่เกี่ยวข้องกับคำสั่ง repo sync
แก้ปัญหาเกี่ยวกับเครือข่าย
ส่วนนี้จะแสดงคําแนะนําหลายรายการในการแก้ไขปัญหาเครือข่ายที่อาจทําให้ซิงค์ไม่สําเร็จ
ใช้การตรวจสอบสิทธิ์เพื่อหลีกเลี่ยงข้อจำกัดด้านโควต้า
ที่อยู่ IP แต่ละรายการที่ใช้เข้าถึงต้นทางจะเชื่อมโยงกับโควต้า เพื่อปกป้องเซิร์ฟเวอร์จากการใช้งานมากเกินไป
เมื่อแชร์ที่อยู่ IP กับผู้ใช้รายอื่น เช่น เมื่อเข้าถึงที่เก็บต้นทางจากภายนอกไฟร์วอลล์ NAT ระบบอาจเรียกใช้โควต้าสำหรับรูปแบบปกติ เช่น โควต้าอาจทริกเกอร์เมื่อผู้ใช้หลายคนซิงค์ไคลเอ็นต์ใหม่จากที่อยู่ IP เดียวกันภายในระยะเวลาสั้นๆ
หากต้องการหลีกเลี่ยงการเรียกใช้โควต้า คุณสามารถใช้สิทธิ์เข้าถึงที่ตรวจสอบสิทธิ์ ซึ่งจะใช้โควต้าแยกกันสำหรับผู้ใช้แต่ละราย โดยไม่คำนึงถึงที่อยู่ IP
วิธีเปิดใช้การเข้าถึงที่ตรวจสอบสิทธิ์
สร้างรหัสผ่านด้วยเครื่องมือสร้างรหัสผ่าน
เรียกใช้คําสั่งต่อไปนี้เพื่อแปลงไคลเอ็นต์ให้ใช้การตรวจสอบสิทธิ์อัตโนมัติ (โดยไม่เปลี่ยนสาขา)
$ repo init -u https://android.googlesource.com/a/platform/manifest
โปรดทราบว่าคำนำหน้าไดเรกทอรี
/a/
จะทริกเกอร์การตรวจสอบสิทธิ์อัตโนมัติ
กำหนดค่าเพื่อใช้พร็อกซี
หากคุณดาวน์โหลดแหล่งที่มาจากหลังพร็อกซี ซึ่งพบได้ทั่วไปในสภาพแวดล้อมขององค์กรบางแห่ง โปรดตรวจสอบว่าคุณได้ระบุพร็อกซีอย่างชัดเจนเพื่อให้ Repo ใช้โดยเรียกใช้คำสั่งต่อไปนี้
$ export HTTP_PROXY=http://proxy_user_id:proxy_password@proxy_server:proxy_port
$ export HTTPS_PROXY=http://proxy_user_id:proxy_password@proxy_server:proxy_port
ปรับการตั้งค่า TCP/IP เพื่อหลีกเลี่ยงปัญหาการเชื่อมต่อ
แม้ว่าจะไม่ค่อยเกิดขึ้น แต่ไคลเอ็นต์ Linux ก็อาจพบปัญหาการเชื่อมต่อได้ เช่น การหยุดชะงักระหว่างการดาวน์โหลดขณะรับออบเจ็กต์ หากต้องการปรับปรุงปัญหานี้ ให้ปรับการตั้งค่าของสแต็ก TCP/IP หรือใช้การเชื่อมต่อแบบไม่พร้อมกัน คุณต้องมีสิทธิ์เข้าถึงระดับรูทจึงจะแก้ไขการตั้งค่า TCP ได้ หากต้องการแก้ไขการตั้งค่า ให้ใช้คำสั่งต่อไปนี้
$ sudo sysctl -w net.ipv4.tcp_window_scaling=0
$ repo sync -j1
ใช้มิเรอร์ในเครื่องเพื่อหลีกเลี่ยงเวลาในการตอบสนองของเครือข่าย
เมื่อใช้ไคลเอ็นต์หลายตัว คุณจะสร้างมิเรอร์ในเครื่องของเนื้อหาเซิร์ฟเวอร์ทั้งหมด และซิงค์ไคลเอ็นต์จากมิเรอร์ดังกล่าวได้โดยไม่ต้องเข้าถึงเครือข่าย ทําตามวิธีการต่อไปนี้เพื่อสร้างมิเรอร์ในเครื่องที่ at
~/aosp-mirror/
และซิงค์ไคลเอ็นต์กับมิเรอร์นั้น
สร้างและซิงค์มิเรอร์
$ mkdir -p /usr/local/aosp/mirror $ cd /usr/local/aosp/mirror $ repo init -u https://android.googlesource.com/mirror/manifest --mirror
คำสั่งเหล่านี้จะสร้างมิเรอร์ในเครื่อง
/user/local/aosp/mirror
และเริ่มต้นมิเรอร์โดยใช้ Flag--mirror
กับคำสั่งrepo init
วิธีซิงค์ไคลเอ็นต์จากมิเรอร์
$ mkdir -p /usr/local/aosp/main $ cd /usr/local/aosp/main $ repo init -u /usr/local/aosp/mirror/platform/manifest.git $ repo sync
สุดท้าย ให้ทำตามคำสั่งต่อไปนี้เพื่อซิงค์มิเรอร์กับเซิร์ฟเวอร์และซิงค์ไคลเอ็นต์กับมิเรอร์
$ cd /usr/local/aosp/mirror</code> $ repo sync $ cd /usr/local/aosp/main $ repo sync
คุณสามารถจัดเก็บมิเรอร์ในเซิร์ฟเวอร์ LAN และเข้าถึงผ่าน NFS, SSH หรือ Git ได้ นอกจากนี้ คุณยังจัดเก็บไฟล์ดังกล่าวไว้ในไดรฟ์แบบถอดได้และส่งต่อไดรฟ์นั้นระหว่างผู้ใช้หรือเครื่องต่างๆ ได้ด้วย
ใช้การโคลนบางส่วน
หากคุณใช้ Git เวอร์ชัน 2.19 ขึ้นไป ให้ระบุ --partial-clone
เมื่อดำเนินการ repo init
เพื่อแก้ไขปัญหาเครือข่ายที่มีเวลาในการตอบสนองต่ำ
$ repo init -u https://android.googlesource.com/platform/manifest -b main --partial-clone --clone-filter=blob:limit=10M
คำสั่งนี้จะดาวน์โหลดออบเจ็กต์ Git ตามที่จำเป็นแทนที่จะเริ่มต้น Repo เพื่อดาวน์โหลดทุกอย่าง
แก้ไขปัญหาการซิงค์ที่เฉพาะเจาะจง
หน้านี้จะแสดงรายละเอียดปัญหาที่ทราบซึ่งคุณอาจพบขณะพยายามซิงค์ซอร์สโค้ด Android
คำสั่งดำเนินการไม่สำเร็จโดยมีข้อผิดพลาด 403 หรือ 500 (ปัญหาเกี่ยวกับพร็อกซี)
คำสั่ง repo init
หรือ repo sync
อาจดำเนินการไม่สำเร็จพร้อมข้อผิดพลาด 403 หรือ 500 โดยส่วนใหญ่ข้อผิดพลาดเหล่านี้เกี่ยวข้องกับพร็อกซี HTTP ที่จัดการการโอนข้อมูลขนาดใหญ่ได้ไม่ดี
แม้ว่าจะไม่มีวิธีแก้ไขที่เจาะจงสำหรับข้อผิดพลาดเหล่านี้ แต่บางครั้งการใช้ Python เวอร์ชันล่าสุดและใช้ repo sync -j1
อย่างชัดแจ้งอาจช่วยได้