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

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

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

    git remote update
    git rebase origin/branch
    

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

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

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

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

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

อัปโหลด

repo upload [project-list]

อัปโหลดการเปลี่ยนแปลงไปยังเซิร์ฟเวอร์การตรวจสอบ 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 ที่ตรวจสอบแล้วในปัจจุบัน ให้ใช้แฟล็ก --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 ซึ่งแปลเป็น สาขาการติดตามในท้องถิ่น ใช้ตัวแปรนี้หากคุณต้องการส่งไฟล์ 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]

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

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

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

status

repo status [project-list]

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

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

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

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

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

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