Repo ช่วยเติมเต็ม Git ด้วยการลดความซับซ้อนของงานในหลายๆ repositories ดู Source Control Tools สำหรับคำอธิบายความสัมพันธ์ระหว่าง Repo และ Git สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับ Repo โปรดดู Repo README
การใช้ Repo ใช้รูปแบบต่อไปนี้:
repo command options
องค์ประกอบที่ไม่บังคับจะแสดงในวงเล็บ [ ] ตัวอย่างเช่น คำสั่งจำนวนมากใช้ project-list เป็นอาร์กิวเมนต์ คุณสามารถระบุ project-list เป็นรายชื่อหรือรายการเส้นทางไปยังไดเร็กทอรีต้นทางในเครื่องสำหรับโครงการ:
repo sync [project0 project1 ... projectn]
repo sync [/path/to/project0 ... /path/to/projectn]
ช่วย
หน้านี้เน้นเฉพาะตัวเลือกหลักเท่านั้น ดูวิธีใช้บรรทัดคำสั่งสำหรับรายละเอียดทั้งหมด เมื่อติดตั้ง Repo คุณจะพบเอกสารประกอบล่าสุดที่เริ่มต้นด้วยบทสรุปของคำสั่งทั้งหมดโดยเรียกใช้:
repo help
คุณสามารถดูข้อมูลโดยละเอียดเกี่ยวกับคำสั่งใดๆ ได้โดยการเรียกใช้คำสั่งนี้ภายในแผนผัง Repo:
repo help command
ตัวอย่างเช่น คำสั่งต่อไปนี้ให้คำอธิบายและรายการตัวเลือกสำหรับอาร์กิวเมนต์ init
ของ Repo ซึ่งจะเริ่มต้น Repo ในไดเร็กทอรีปัจจุบัน (ดู รายละเอียดเริ่ม ต้น)
repo help init
หรือหากต้องการดูเฉพาะรายการตัวเลือกที่มีอยู่ ให้เรียกใช้:
repo command --helpตัวอย่างเช่น:
repo init --help
ในนั้น
repo init -u url [options]
ติดตั้ง Repo ในไดเรกทอรีปัจจุบัน สิ่งนี้จะสร้างไดเร็กทอรี .repo/
ที่มีที่เก็บ Git สำหรับซอร์สโค้ด Repo และไฟล์รายการ Android มาตรฐาน
ตัวเลือก:
-
-u
: ระบุ URL ที่จะดึงที่เก็บรายการ พบไฟล์ Manifest ทั่วไปได้ที่https://android.googlesource.com/platform/manifest
-
-m
: เลือกไฟล์รายการภายในที่เก็บ หากไม่ได้เลือกชื่อรายการ ค่าเริ่มต้นคือdefault.xml
-
-b
: ระบุการแก้ไข นั่นคือ manifest-branch เฉพาะ
หมายเหตุ: สำหรับคำสั่ง Repo ที่เหลือทั้งหมด ไดเร็กทอรีการทำงานปัจจุบันต้องเป็นไดเร็กทอรีหลักของ .repo/
หรือไดเร็กทอรีย่อยของไดเร็กทอรีหลัก
ซิงค์
repo sync [project-list]
ดาวน์โหลดการเปลี่ยนแปลงใหม่และอัปเดตไฟล์การทำงานในสภาพแวดล้อมแบบโลคัลของคุณ โดยพื้นฐานแล้วจะทำให้การ git fetch
สำเร็จในที่เก็บ Git ทั้งหมด หากคุณรัน repo sync
โดยไม่มีอาร์กิวเมนต์ มันจะซิงโครไนซ์ไฟล์สำหรับโปรเจ็กต์ทั้งหมด
เมื่อคุณเรียกใช้ repo sync
สิ่งนี้จะเกิดขึ้น:
หากโครงการไม่เคยซิงโครไน
repo sync
จะเทียบเท่ากับgit clone
สาขาทั้งหมดในที่เก็บระยะไกลจะถูกคัดลอกไปยังไดเร็กทอรีโปรเจ็กต์โลคัลหากโปรเจ็กต์ได้รับการซิงโครไนซ์มาก่อน
repo sync
จะเทียบเท่ากับ:git remote update git rebase origin/branch
โดยที่
branch
เป็นสาขาที่เช็คเอาท์ในปัจจุบันในไดเร็กทอรีโปรเจ็กต์โลคัล หากสาขาโลคัลไม่ได้ติดตามสาขาในที่เก็บระยะไกล จะไม่มีการซิงโครไนซ์สำหรับโปรเจ็กต์หากการดำเนินการ Git rebase ส่งผลให้เกิดข้อขัดแย้งในการผสาน ให้ใช้คำสั่ง Git ปกติ (เช่น
git rebase --continue
) เพื่อแก้ไขข้อขัดแย้ง
หลังจากการเรียกใช้ repo sync
สำเร็จ รหัสในโครงการที่ระบุจะเป็นปัจจุบันและซิงค์กับรหัสในที่เก็บระยะไกล
นี่คือตัวเลือกที่สำคัญ ดู repo help sync
สำหรับข้อมูลเพิ่มเติม:
-c
: ดึงเฉพาะสาขารายการปัจจุบันจากเซิร์ฟเวอร์-d
: สลับโครงการที่ระบุกลับไปแก้ไขรายการ สิ่งนี้มีประโยชน์หากโครงการอยู่ในสาขาหัวข้อ แต่จำเป็นต้องมีการแก้ไขรายการชั่วคราว-f
: ดำเนินการซิงค์โครงการอื่นแม้ว่าโครงการจะล้มเหลวในการซิงค์-j threadcount
: แยกการซิงค์ระหว่างเธรดเพื่อให้เสร็จเร็วขึ้น ตรวจสอบให้แน่ใจว่าคุณไม่ได้ใช้งานเครื่องมากเกินไป - ปล่อยให้ CPU บางส่วนสงวนไว้สำหรับงานอื่น หากต้องการดูจำนวน CPU ที่มีให้รันก่อน:nproc --all
-q
: เรียกใช้อย่างเงียบ ๆ โดยระงับข้อความแสดงสถานะ-s
: ซิงค์กับบิลด์ที่ใช้งานได้ดีซึ่งระบุโดยองค์ประกอบ manifest-server ในรายการปัจจุบัน
ที่อัพโหลด
repo upload [project-list]
สำหรับโครงการที่ระบุ Repo จะเปรียบเทียบสาขาในพื้นที่กับสาขาระยะไกลที่อัปเดตระหว่างการซิงค์ Repo ครั้งล่าสุด Repo แจ้งให้คุณเลือกอย่างน้อยหนึ่งสาขาที่ยังไม่ได้อัปโหลดเพื่อตรวจสอบ
การกระทำทั้งหมดในสาขาที่เลือกจะถูกส่งไปยัง Gerrit ผ่านการเชื่อมต่อ HTTPS คุณต้องกำหนดค่ารหัสผ่าน HTTPS เพื่อเปิดใช้งานการอนุญาตการอัปโหลด ไปที่ ตัวสร้างรหัสผ่าน เพื่อสร้างคู่ชื่อผู้ใช้/รหัสผ่านใหม่เพื่อใช้ผ่าน HTTPS
เมื่อ Gerrit ได้รับข้อมูลอ็อบเจกต์ผ่านเซิร์ฟเวอร์ มันจะเปลี่ยนการคอมมิตแต่ละรายการเป็นการเปลี่ยนแปลงเพื่อให้ผู้ตรวจสอบสามารถแสดงความคิดเห็นเกี่ยวกับคอมมิทเฉพาะได้ หากต้องการรวมจุดตรวจ สอบ หลายจุดเป็นหนึ่งเดียว ให้ใช้ git rebase -i
ก่อนเรียกใช้การอัปโหลด
หากคุณเรียกใช้ repo upload
โดยไม่มีอาร์กิวเมนต์ มันจะค้นหาโครงการทั้งหมดเพื่อหาการเปลี่ยนแปลงที่จะอัปโหลด
หากต้องการแก้ไขการเปลี่ยนแปลงหลังจากอัปโหลดแล้ว ให้ใช้เครื่องมือเช่น git rebase -i
หรือ git commit --amend
เพื่ออัปเดตการคอมมิตในเครื่องของคุณ หลังจากแก้ไขเสร็จแล้ว:
- ตรวจสอบว่าสาขาที่อัปเดตเป็นสาขาที่เช็คเอาท์ในปัจจุบัน
- ใช้
repo upload --replace PROJECT
เพื่อเปิดตัวแก้ไขการจับคู่การเปลี่ยนแปลง - สำหรับแต่ละคอมมิตในซีรีส์ ให้ป้อน ID การเปลี่ยนแปลงของ Gerrit ภายในวงเล็บ:
# Replacing from branch foo [ 3021 ] 35f2596c Refactor part of GetUploadableBranches to lookup one specific... [ 2829 ] ec18b4ba Update proto client to support patch set replacments # Insert change numbers in the brackets to add a new patch set. # To create a new change record, leave the brackets empty.
หลังจากอัปโหลดเสร็จสิ้น การเปลี่ยนแปลงจะมีชุดแพตช์เพิ่มเติม
หากคุณต้องการอัปโหลดเฉพาะสาขา Git ที่เช็คเอาต์ในปัจจุบัน ให้ใช้แฟล็ก --current-branch
(หรือเรียกสั้นๆ ว่า --cbr
)
ความแตกต่าง
repo diff [project-list]
แสดงการเปลี่ยนแปลงที่โดดเด่นระหว่างการคอมมิตและแผนผังการทำงานโดยใช้ git diff
ดาวน์โหลด
repo download target change
ดาวน์โหลดการเปลี่ยนแปลงที่ระบุจากระบบการตรวจสอบ และทำให้พร้อมใช้งานในไดเร็กทอรีการทำงานในเครื่องของโครงการของคุณ
ตัวอย่างเช่น หากต้องการดาวน์โหลด การเปลี่ยนแปลง 23823 ลงในไดเร็กทอรี platform/build ของคุณ:
repo download platform/build 23823
การเรียกใช้ repo sync
จะลบคอมมิชชันที่เรียกค้นด้วย repo download
หรือคุณสามารถตรวจสอบสาขาระยะไกลโดยใช้ git checkout m/main
หมายเหตุ: มีความล่าช้าในการจำลองแบบไปยังทุกเซิร์ฟเวอร์ทั่วโลก ดังนั้นจึงมีความล่าช้าเล็กน้อยในการมิเรอร์ระหว่างเวลาที่การเปลี่ยนแปลงปรากฏบนเว็บใน Gerrit และเวลาที่ repo download
สามารถค้นหาการเปลี่ยนแปลงสำหรับผู้ใช้ทั้งหมด
สำหรับทุกอย่าง
repo forall [project-list] -c command
ดำเนินการคำสั่งเชลล์ที่กำหนดในแต่ละโครงการ ตัวแปรสภาพแวดล้อมเพิ่มเติมต่อไปนี้มีให้โดย repo forall
:
REPO_PROJECT
ถูกตั้งค่าเป็นชื่อเฉพาะของโครงการREPO_PATH
เป็นเส้นทางที่สัมพันธ์กับรูทของไคลเอนต์REPO_REMOTE
คือชื่อของระบบรีโมตจากรายการREPO_LREV
คือชื่อของการแก้ไขจากรายการ ซึ่งแปลเป็นสาขาการติดตามในเครื่อง ใช้สิ่งนี้หากคุณต้องการส่งการแก้ไขรายการไปยังคำสั่ง Git ที่ดำเนินการในเครื่องREPO_RREV
คือชื่อของการแก้ไขจากรายการ ตรงตามที่เขียนไว้ในรายการ
ตัวเลือก:
-c
: คำสั่งและอาร์กิวเมนต์เพื่อดำเนินการ คำสั่งได้รับการประเมินผ่าน/bin/sh
และอาร์กิวเมนต์ใดๆ หลังจากที่ส่งผ่านเป็นพารามิเตอร์ตำแหน่งเชลล์-p
: แสดงส่วนหัวของโปรเจ็กต์ก่อนเอาต์พุตของคำสั่งที่ระบุ สิ่งนี้ทำได้โดยการโยงไพพ์เข้ากับสตรีม stdin, stdout และ sterr ของคำสั่ง และไพพ์เอาต์พุตทั้งหมดไปยังสตรีมต่อเนื่องที่แสดงในเซสชันเพจเจอร์เดียว-v
: แสดงข้อความที่คำสั่งเขียนถึง stderr
พรุน
repo prune [project-list]
พรุน (ลบ) หัวข้อที่ผสานแล้ว
เริ่ม
repo start branch-name [project-list]
เริ่มสาขาใหม่สำหรับการพัฒนา โดยเริ่มจากการแก้ไขที่ระบุในรายการ
อาร์กิวเมนต์ BRANCH_NAME
ให้คำอธิบายสั้น ๆ เกี่ยวกับการเปลี่ยนแปลงที่คุณกำลังพยายามทำกับโครงการ หากคุณไม่ทราบ ให้พิจารณาใช้ชื่อ default
อาร์กิวเมนต์ project-list
ระบุว่าโครงการใดเข้าร่วมในสาขาหัวข้อนี้
หมายเหตุ: จุด ( . ) เป็นชวเลขสำหรับโครงการในไดเร็กทอรีการทำงานปัจจุบัน
สถานะ
repo status [project-list]
เปรียบเทียบแผนผังการทำงานกับพื้นที่จัดเตรียม (ดัชนี) และการกระทำล่าสุดในสาขานี้ (HEAD) ในแต่ละโครงการที่ระบุ แสดงบรรทัดสรุปสำหรับแต่ละไฟล์ที่มีความแตกต่างระหว่างสามสถานะนี้
หากต้องการดูสถานะของสาขาปัจจุบัน ให้เรียกใช้ repo status .
. ข้อมูลสถานะจะแสดงตามโครงการ สำหรับแต่ละไฟล์ในโครงการ จะใช้รหัสสองตัวอักษร
ในคอลัมน์แรก อักษรตัวพิมพ์ใหญ่จะระบุว่าพื้นที่การจัดเตรียมแตกต่างจากสถานะที่คอมมิตล่าสุดอย่างไร
จดหมาย | ความหมาย | คำอธิบาย |
---|---|---|
- | ไม่มีการเปลี่ยนแปลง | เหมือนกันใน HEAD และดัชนี |
ก | เพิ่ม | ไม่อยู่ใน HEAD ในดัชนี |
ม | แก้ไข | ใน HEAD แก้ไขในดัชนี |
ง | ลบแล้ว | ใน HEAD ไม่ใช่ในดัชนี |
ร | เปลี่ยนชื่อ | ไม่อยู่ใน HEAD เส้นทางเปลี่ยนในดัชนี |
ค | คัดลอก | ไม่อยู่ใน HEAD คัดลอกมาจากดัชนีอื่น |
ต | เปลี่ยนโหมดแล้ว | เนื้อหาเดียวกันใน HEAD และดัชนี เปลี่ยนโหมด |
ยู | ยังไม่ได้รวม | ความขัดแย้งระหว่าง HEAD และดัชนี ต้องใช้ความละเอียด |
ในคอลัมน์ที่สอง ตัวอักษรพิมพ์เล็กระบุว่าไดเร็กทอรีการทำงานแตกต่างจากดัชนีอย่างไร
จดหมาย | ความหมาย | คำอธิบาย |
---|---|---|
- | ใหม่/ไม่รู้จัก | ไม่อยู่ในดัชนี ในผังงาน |
ม | แก้ไข | ในดัชนี ในผังงาน แก้ไข |
ง | ลบแล้ว | ในดัชนี ไม่ใช่ในผังงาน |
การจัดการข้อผิดพลาดเกี่ยวกับการซื้อซ้ำ
git commit -a # Commit local changes first so they aren't lost. repo start branch-name # Start the branch git reset --hard HEAD@{1} # And reset the branch so that it matches the commit before repo start repo upload .
ข้อผิดพลาด repo: error: no branches ready for upload
ปรากฏขึ้นเมื่อไม่ได้เรียกใช้คำสั่ง repo start
ในช่วงเริ่มต้นของเซสชัน หากต้องการกู้คืน คุณสามารถตรวจสอบรหัสการยืนยัน เริ่มต้นสาขาใหม่แล้วรวมเข้าด้วยกัน