การอ้างอิงคำสั่ง Repo

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 ในช่วงเริ่มต้นของเซสชัน หากต้องการกู้คืน คุณสามารถตรวจสอบรหัสการยืนยัน เริ่มต้นสาขาใหม่แล้วรวมเข้าด้วยกัน