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