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

Repo เสริม Git ด้วยการลดความซับซ้อนของงานในที่เก็บข้อมูลหลายแห่ง ดู เครื่องมือควบคุมแหล่งที่มา สำหรับคำอธิบายความสัมพันธ์ระหว่าง 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 ในไดเร็กทอรีปัจจุบัน (ดูรายละเอียดใน init )

repo help init

หรือหากต้องการดูเฉพาะรายการตัวเลือกที่มีอยู่ ให้รัน:

repo command --help
ตัวอย่างเช่น:
repo init --help

ในนั้น

repo init -u url [options]

ติดตั้ง Repo ในไดเร็กทอรีปัจจุบัน สิ่งนี้จะสร้างไดเร็กทอรี .repo/ พร้อมที่เก็บ Git สำหรับซอร์สโค้ด Repo และไฟล์ Manifest มาตรฐานของ Android

ตัวเลือก:

  • -u : ระบุ URL ที่จะดึงข้อมูลที่เก็บรายการ ดูรายการทั่วไปได้ที่ 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 เพื่อเปิดตัวแก้ไขการจับคู่การเปลี่ยนแปลง
  • สำหรับแต่ละคอมมิตในชุด ให้ป้อนรหัสการเปลี่ยนแปลง 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 ลงในไดเร็กทอรีแพลตฟอร์ม/บิลด์ของคุณ:

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 คือชื่อของระบบรีโมตจากไฟล์ Manifest

  • REPO_LREV คือชื่อของการแก้ไขจากรายการ ซึ่งแปลเป็นสาขาการติดตามในเครื่อง ใช้สิ่งนี้หากคุณต้องการส่งการแก้ไขรายการไปยังคำสั่ง Git ที่ดำเนินการในเครื่อง

  • REPO_RREV คือชื่อของการแก้ไขจากไฟล์ Manifest ตามที่เขียนไว้ในไฟล์ Manifest ทุกประการ

ตัวเลือก:

  • -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 และดัชนี จำเป็นต้องมีความละเอียด

ในคอลัมน์ที่สอง ตัวอักษรตัวพิมพ์เล็กจะระบุว่าไดเร็กทอรีการทำงานแตกต่างจากดัชนีอย่างไร

จดหมาย ความหมาย คำอธิบาย
- - ใหม่/ไม่ทราบ ไม่ได้อยู่ในดัชนีในแผนผังงาน
ดัดแปลง ในดัชนี ในแผนผังงาน แก้ไขแล้ว
ลบแล้ว ในดัชนี ไม่ใช่ในแผนผังงาน

การจัดการข้อผิดพลาด repo

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