การอ้างอิงคำสั่ง 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 ที่จะดึงข้อมูลที่เก็บรายการ พบไฟล์ 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 ส่งผลให้เกิดข้อขัดแย้งในการผสาน ให้ใช้คำสั่ง 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 change ID ภายในวงเล็บ:
    # 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/master

หมายเหตุ: มีความล่าช้าในการจำลองแบบไปยังเซิร์ฟเวอร์ทั้งหมดทั่วโลก ดังนั้นจึงมีความล่าช้าเล็กน้อยในการมิเรอร์ระหว่างเวลาที่การเปลี่ยนแปลงปรากฏบนเว็บใน Gerrit และเมื่อ repo download สามารถค้นหาการเปลี่ยนแปลงสำหรับผู้ใช้ทั้งหมดได้

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

repo forall [project-list] -c command

ดำเนินการคำสั่งเชลล์ที่กำหนดในแต่ละโปรเจ็กต์ ตัวแปรสภาพแวดล้อมเพิ่มเติมต่อไปนี้มีให้โดย repo forall :

  • REPO_PROJECT ถูกตั้งค่าเป็นชื่อเฉพาะของโปรเจ็กต์

  • REPO_PATH คือพาธที่สัมพันธ์กับรูทของไคลเอ็นต์

  • REPO_REMOTE คือชื่อของระบบรีโมตจากรายการ

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

  • REPO_RREV คือชื่อของการแก้ไขจากรายการ ตรงตามที่เขียนไว้ในไฟล์ 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 และ index
อา เพิ่ม ไม่อยู่ใน HEAD ใน index
เอ็ม ดัดแปลง ใน HEAD แก้ไขใน index
ดี ถูกลบ ใน HEAD ไม่ใช่ใน index
R เปลี่ยนชื่อ ไม่อยู่ใน HEAD เปลี่ยนเส้นทางใน index
คัดลอกแล้ว ไม่อยู่ใน HEAD คัดลอกมาจากที่อื่นใน index
ตู่ เปลี่ยนโหมดแล้ว เนื้อหาเดียวกันใน HEAD และดัชนี โหมดเปลี่ยน
ยู ยกเลิกการผสาน ความขัดแย้งระหว่าง HEAD และดัชนี ความละเอียดที่ต้องการ

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

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

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