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

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

  • หากมีการซิงค์โปรเจ็กต์ม��ก������ repo sync จะ���ี��่าเ��่ากับ:

    git remote update
    git rebase origin/branch
    

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

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

ตัวเลือกสำคัญ

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

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

อัปโหลด

repo upload [project-list]

อัปโหลดการเปลี่ยนแปลงไปยังเซิร์ฟเวอร์การตรวจสอบ สำหรับโปรเจ็กต์ที่ระบุ Repo จ��เปรียบเทียบ Branch ในเครื่องกับ Branch ระยะไกลที่อัปเดตแล้วในระหว่างการซิงค์ที่เก็บครั้งล่าสุด 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)

ความแตกต่าง

repo diff [project-list]

แสดงการเปลี่ยนแปลงที่รอดำเนินการระหว่างคอมมิตและโครงสร้างการทำงานโดยใช้ git diff

ดาวน์โหลด

repo download target change

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

ตัวอย่างเช่น หากต้องการดาวน์โหลด change 23823 ลงในไดเรกทอรี platform/build ให้ทำดังนี้

repo download platform/build 23823

การเรียกใช้ repo sync จะนำการคอมมิตที่ดึงข้อมูลด้วย repo download ออก หรือจะตรวจสอบสาขาระยะไกลโดยใช้ git checkout m/main ก็ได้

Forall

repo forall [project-list] -c command

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

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

ตัวเลือก:

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

ลูกพรุน

repo prune [project-list]

������ (ลบ) หัวข้อที่ผสานรวมแล้ว

เริ่มต้น

repo start branch-name [project-list]

เริ่มต้น Branch ใหม่เพื่อการพัฒนา โดยเริ่มต้นจากการแก้ไขที่ระบุไว้ในไฟล์ Manifest

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

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

status

repo status [project-list]

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

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

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

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

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

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