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