การอ้างอิงคำสั่ง 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 help

ให้ความช่วยเหลือเกี่ยวกับคำสั่ง repo คุณสามารถดูข้อมูลโดยละเอียดเกี่ยวกับคำสั่ง Repo เฉพาะที่ระบุคำสั่งเป็นตัวเลือก:

repo help command

ตัวอย่างเช่น คำสั่งต่อไปนี้จะให้คำอธิบายและรายการตัวเลือกสำหรับคำสั่ง 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 sync [project-list]

ดาวน์โหลดการเปลี่ยนแปลงใหม่และอัปเดตไฟล์การทำงานในสภาพแวดล้อมภายในเครื่องของคุณ ซึ่งช่วยให้การดึง git fetch สำเร็จจากที่เก็บ Git ทั้งหมด หากคุณเรียกใช้ repo sync โดยไม่มีอาร์กิวเมนต์ ระบบจะซิงโครไนซ์ไฟล์สำหรับทุกโปรเจ็กต์

เมื่อคุณเรียกใช้ repo sync นี่คือสิ่งที่เกิดขึ้น:

  • หากโปรเจ็กต์ไม่เคยซิงโคร repo sync จะเทียบเท่ากับ git clone สาขาทั้งหมดในที่เก็บระยะไกลจะถูกคัดลอกไปยังไดเร็กทอรีโปรเจ็กต์ในเครื่อง

  • หากโปรเจ็กต์ได้รับการซิงโครไนซ์มาก่อน repo sync จะเทียบเท่ากับ:

    git remote update
    git rebase origin/branch
    

    โดยที่ branch คือสาขาที่เช็คเอาท์ปัจจุบันในไดเร็กทอรีโปรเจ็กต์โลคัล หากสาขาในระบบไม่ติดตามสาขาในพื้นที่เก็บข้อมูลระยะไกล จะไม่มีการซิงโครไนซ์เกิดขึ้นสำหรับโปรเจ็กต์

หลังจากการรัน repo sync สำเร็จ โค้ดในโปรเจ็กต์ที่ระบุจะเป็นข้อมูลล่าสุดและซิงค์กับโค้ดในที่เก็บระยะไกล

ตัวเลือกที่สำคัญ:

  • -c : ดึงเฉพาะสาขารายการปัจจุบันจากเซิร์ฟเวอร์
  • -d : สลับโปรเจ็กต์ที่ระบุกลับไปเป็นการแก้ไขรายการ ตัวเลือกนี้จะมีประโยชน์หากโปรเจ็กต์อยู่ในสาขาของหัวข้อ แต่จำเป็นต้องมีการแก้ไขรายการชั่วคราว
  • -f : ดำเนินการซิงค์โปรเจ็กต์อื่นต่อไปแม้ว่าโปรเจ็กต์จะล้มเหลวในการซิงค์ก็ตาม
  • threadcount : แบ่งการซิงค์ข้ามเธรดเพื่อให้เสร็จเร็วขึ้น ตรวจสอบให้แน่ใจว่าคุณไม่ได้ใช้งานเครื่องมากเกินไป - ปล่อยให้ CPU บางตัวสงวนไว้สำหรับงานอื่น หากต้องการดูจำนวน CPU ที่มีอยู่ ให้รัน nproc --all ก่อน
  • -q : ทำงานอย่างเงียบ ๆ โดยการระงับข้อความสถานะ
  • -s : ซิงค์กับบิลด์ที่ดีที่รู้จักตามที่ระบุโดยองค์ประกอบ manifest-server ในรายการปัจจุบัน

สำหรับตัวเลือกเพิ่มเติม ให้เรียกใช้ repo help sync

ที่อัพโหลด

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 replacements
    # 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

สำหรับทุกอย่าง

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