การอ้างอิงคำสั่งที่เก็บ

Repo ช่วยเสริม Git โดยการทําให้ทํางานในหลายที่เก็บได้ง่ายขึ้น ดูคำอธิบายความสัมพันธ์ระหว่าง Repo กับ Git ได้ที่เครื่องมือควบคุมแหล่งที่มา ดูรายละเอียดเพิ่มเติมเกี่ยวกับรีโปได้ที่README ของรีโป

การใช้รีโปมีลักษณะดังต่อไปนี้

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

init

repo init -u url [options]

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

ตัวเลือก:

  • -u: ระบุ URL ที่จะดึงข้อมูลพื้นที่เก็บข้อมูลไฟล์ Manifest ไฟล์ Manifest ทั่วไปจะอยู่ที่ https://android.googlesource.com/platform/manifest

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

หากต้องการดูตัวเลือกเพิ่มเติม ให้เรียกใช้ repo help sync

อัปโหลด

repo upload [project-list]

อัปโหลดการเปลี่ยนแปลงไปยังเซิร์ฟเวอร์ตรวจสอบ สําหรับโปรเจ็กต์ที่ระบุ Repo จะเปรียบเทียบสาขาในเครื่องกับสาขาระยะไกลที่อัปเดตระหว่างการซิงค์ Repo ครั้งล่าสุด Repo จะแจ้งให้คุณเลือกอย่างน้อย 1 สาขาที่ยังไม่ได้อัปโหลดเพื่อรับการตรวจสอบ

จากนั้นระบบจะส่งคอมมิตทั้งหมดในสาขาที่เลือกไปยัง 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 ที่ตรวจสอบอยู่ในปัจจุบัน ให้ใช้ Flag --current-branch (หรือ --cbr สั้นๆ)

สำหรับการเปลี่ยนแปลงที่เกี่ยวข้อง คุณควรเก็บ CL ทั้งหมดไว้ในหัวข้อเดียวกัน คุณเพิ่มชื่อหัวข้อขณะอัปโหลดได้ด้วย --topic=TOPIC หรือจะส่ง -t เพื่อตั้งค่าชื่อหัวข้อให้เหมือนกับชื่อสาขาในเครื่องก็ได้

diff

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 ก็ได้

forall

repo forall [project-list] -c command

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

  • REPO_PROJECT ได้รับการตั้งค่าเป็นชื่อที่ไม่ซ้ำกันของโปรเจ็กต์
  • REPO_PATH คือเส้นทางที่สัมพันธ์กับรูทของไคลเอ็นต์
  • REPO_REMOTE คือชื่อของระบบระยะไกลจากไฟล์ Manifest
  • REPO_LREV คือชื่อของเวอร์ชันแก้ไขจากไฟล์ Manifest ที่แปลเป็นสาขาการติดตามในเครื่อง ใช้ตัวแปรนี้หากต้องการส่งการแก้ไขไฟล์ Manifest ไปยังคําสั่ง Git ที่เรียกใช้จากเครื่อง
  • REPO_RREV คือชื่อของเวอร์ชันแก้ไขจากไฟล์ Manifest ตามที่เขียนไว้อย่างตรงทั้งหมดในไฟล์ Manifest

ตัวเลือก:

  • -c: คำสั่งและอาร์กิวเมนต์ที่จะดำเนินการ ระบบจะประเมินคำสั่งผ่าน /bin/sh และส่งอาร์กิวเมนต์ต่อจากคำสั่งนั้นผ่านพารามิเตอร์ตำแหน่งของเชลล์
  • -p: แสดงส่วนหัวของโปรเจ็กต์ก่อนเอาต์พุตของคำสั่งที่ระบุ ซึ่งทำได้โดยการเชื่อมโยงไปป์กับสตรีม stdin, stdout และ sterr ของคำสั่ง และส่งออกข้อมูลทั้งหมดไปยังสตรีมต่อเนื่องที่แสดงในเซสชันโปรแกรมเลื่อนหน้าเดียว
  • -v: แสดงข้อความที่คำสั่งเขียนไปยัง stderr

พรุน

repo prune [project-list]

ตัด (ลบ) หัวข้อที่ผสานแล้ว

เริ่มต้น

repo start branch-name [project-list]

เริ่มสาขาใหม่สําหรับการพัฒนา โดยเริ่มจากฉบับที่ระบุไว้ในไฟล์ Manifest

อาร์กิวเมนต์ BRANCH_NAME มีคำอธิบายสั้นๆ เกี่ยวกับการเปลี่ยนแปลงที่คุณพยายามทำกับโปรเจ็กต์ หากไม่ทราบ ให้ลองใช้ชื่อ default

อาร์กิวเมนต์ project-list จะระบุโปรเจ็กต์ที่เข้าร่วมในสาขาหัวข้อนี้

status

repo status [project-list]

เปรียบเทียบทรีที่ทำงานกับพื้นที่เตรียม (ดัชนี) และการคอมมิตล่าสุดในสาขานี้ (HEAD) ในแต่ละโปรเจ็กต์ที่ระบุ แสดงบรรทัดข้อมูลสรุปสำหรับไฟล์แต่ละไฟล์ที่มีความแตกต่างระหว่างสถานะ 3 สถานะนี้

หากต้องการดูสถานะของสาขาปัจจุบันเท่านั้น ให้เรียกใช้ repo status . ข้อมูลสถานะจะแสดงตามโปรเจ็กต์ ระบบจะใช้รหัส 2 ตัวอักษรสำหรับไฟล์แต่ละไฟล์ในโปรเจ็กต์

ในคอลัมน์แรก อักษรตัวพิมพ์ใหญ่จะระบุความแตกต่างของพื้นที่เตรียมความพร้อมจากสถานะที่คอมมิตล่าสุด

จดหมาย ความหมาย คำอธิบาย
- ไม่มีการเปลี่ยนแปลง เหมือนกันใน HEAD และดัชนี
เพิ่มแล้ว ไม่อยู่ใน HEAD แต่อยู่ในดัชนี
แก้ไขแล้ว ใน HEAD แก้ไขในดัชนี
D ลบแล้ว อยู่ในส่วน HEAD ไม่ได้อยู่ในดัชนี
R เปลี่ยนชื่อแล้ว ไม่อยู่ใน HEAD มีการเปลี่ยนแปลงเส้นทางในดัชนี
C คัดลอกแล้ว ไม่ได้อยู่ใน HEAD แต่คัดลอกมาจากรายการอื่นในดัชนี
T เปลี่ยนโหมด เนื้อหาเหมือนกันใน HEAD และดัชนี แต่มีการเปลี่ยนแปลงโหมด
U ไม่ได้ผสาน เกิดความขัดแย้งระหว่าง HEAD กับดัชนี ต้องมีการแก้ไข

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

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

จัดการข้อผิดพลาดเกี่ยวกับรีโป

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