Repo เสริม Git ด้วยการลดความซับซ้อนของงานในที่เก็บข้อมูลหลายแห่ง ดู เครื่องมือควบคุมแหล่งที่มา สำหรับคำอธิบายความสัมพันธ์ระหว่าง Repo และ Git สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับ Repo โปรดดูที่ Repo README
การใช้ Repo อยู่ในรูปแบบต่อไปนี้:
repo command options
องค์ประกอบเพิ่มเติมจะแสดงอยู่ในวงเล็บ [ ] ตัวอย่างเช่น คำสั่งหลายคำสั่งใช้ project-list เป็นอาร์กิวเมนต์ คุณสามารถระบุ project-list เป็นรายชื่อหรือรายการเส้นทางไปยังไดเร็กทอรีต้นทางในเครื่องสำหรับโครงการได้:
repo sync [project0 project1 ... projectn]
repo sync [/path/to/project0 ... /path/to/projectn]
ช่วย
หน้านี้เน้นเฉพาะตัวเลือกที่สำคัญเท่านั้น ดูวิธีใช้บรรทัดคำสั่งสำหรับรายละเอียดทั้งหมด เมื่อติดตั้ง Repo แล้ว คุณจะพบเอกสารล่าสุดที่เริ่มต้นด้วยสรุปคำสั่งทั้งหมดโดยการรัน:
repo help
คุณสามารถดูข้อมูลโดยละเอียดเกี่ยวกับคำสั่งใดๆ ได้โดยการรันสิ่งนี้ภายในแผนผัง Repo:
repo help command
ตัวอย่างเช่น คำสั่งต่อไปนี้จะให้คำอธิบายและรายการตัวเลือกสำหรับอาร์กิวเมนต์ init
ของ Repo ซึ่งจะเตรียมข้อมูลเบื้องต้น Repo ในไดเร็กทอรีปัจจุบัน (ดูรายละเอียดใน init )
repo help init
หรือหากต้องการดูเฉพาะรายการตัวเลือกที่มีอยู่ ให้รัน:
repo command --helpตัวอย่างเช่น:
repo init --help
ในนั้น
repo init -u url [options]
ติดตั้ง Repo ในไดเร็กทอรีปัจจุบัน สิ่งนี้จะสร้างไดเร็กทอรี .repo/
พร้อมที่เก็บ Git สำหรับซอร์สโค้ด Repo และไฟล์ Manifest มาตรฐานของ Android
ตัวเลือก:
-
-u
: ระบุ URL ที่จะดึงข้อมูลที่เก็บรายการ ดูรายการทั่วไปได้ที่https://android.googlesource.com/platform/manifest
-
-m
: เลือกไฟล์รายการภายในที่เก็บ หากไม่ได้เลือกชื่อรายการ ค่าดีฟอลต์คือdefault.xml
-
-b
: ระบุการแก้ไข นั่นคือ manifest-branch เฉพาะ
หมายเหตุ: สำหรับคำสั่ง Repo ที่เหลือทั้งหมด ไดเร็กทอรีการทำงานปัจจุบันต้องเป็นไดเร็กทอรีหลักของ .repo/
หรือไดเร็กทอรีย่อยของไดเร็กทอรีหลัก
ซิงค์
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
เป็นสาขาที่เช็คเอาท์ในปัจจุบันในไดเร็กทอรีโปรเจ็กต์โลคัล หากสาขาในระบบไม่ติดตามสาขาในพื้นที่เก็บข้อมูลระยะไกล จะไม่มีการซิงโครไนซ์เกิดขึ้นสำหรับโปรเจ็กต์หากการดำเนินการ Git rebase ส่งผลให้เกิดข้อขัดแย้งในการผสาน ให้ใช้คำสั่ง Git ปกติ (เช่น
git rebase --continue
) เพื่อแก้ไขข้อขัดแย้ง
หลังจากการรัน repo sync
สำเร็จ โค้ดในโปรเจ็กต์ที่ระบุจะเป็นปัจจุบันและซิงค์กับโค้ดในที่เก็บระยะไกล
นี่คือตัวเลือกที่สำคัญ ดู repo help sync
เพิ่มเติม:
-c
: ดึงเฉพาะสาขารายการปัจจุบันจากเซิร์ฟเวอร์-d
: สลับโปรเจ็กต์ที่ระบุกลับไปเป็นการแก้ไขรายการ สิ่งนี้มีประโยชน์หากโปรเจ็กต์อยู่ในสาขาหัวข้อ แต่จำเป็นต้องมีการแก้ไขรายการชั่วคราว-f
: ดำเนินการซิงค์โปรเจ็กต์อื่นต่อไปแม้ว่าโปรเจ็กต์จะล้มเหลวในการซิงค์ก็ตาม-j threadcount
: แบ่งการซิงค์ข้ามเธรดเพื่อให้เสร็จเร็วขึ้น ตรวจสอบให้แน่ใจว่าคุณไม่ได้ใช้งานเครื่องมากเกินไป - ปล่อยให้ CPU บางตัวสงวนไว้สำหรับงานอื่น หากต้องการดูจำนวน CPU ที่มีอยู่ ให้รันครั้งแรก:nproc --all
-q
: ทำงานอย่างเงียบ ๆ โดยการระงับข้อความสถานะ-s
: ซิงค์กับบิลด์ที่ดีที่รู้จักตามที่ระบุโดยองค์ประกอบ manifest-server ในรายการปัจจุบัน
ที่อัพโหลด
repo upload [project-list]
สำหรับโปรเจ็กต์ที่ระบุ Repo จะเปรียบเทียบสาขาในพื้นที่กับสาขาระยะไกลที่อัปเดตระหว่างการซิงค์ Repo ครั้งล่าสุด Repo แจ้งให้คุณเลือกอย่างน้อยหนึ่งสาขาที่ยังไม่ได้อัปโหลดเพื่อตรวจสอบ
คอมมิตทั้งหมดในสาขาที่เลือกจะถูกส่งไปยัง 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 replacments # 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
ดาวน์โหลดการเปลี่ยนแปลงที่ระบุจากระบบตรวจสอบ และทำให้พร้อมใช้งานในไดเร็กทอรีการทำงานในเครื่องของโปรเจ็กต์ของคุณ
ตัวอย่างเช่น หากต้องการดาวน์โหลด การเปลี่ยนแปลง 23823 ลงในไดเร็กทอรีแพลตฟอร์ม/บิลด์ของคุณ:
repo download platform/build 23823
การรัน repo sync
จะลบคอมมิตใดๆ ที่ดึงมาจาก repo download
หรือคุณสามารถตรวจสอบสาขาระยะไกลโดยใช้ git checkout m/main
หมายเหตุ: มีความล่าช้าในการจำลองสำหรับเซิร์ฟเวอร์ทั้งหมดทั่วโลก ดังนั้นจึงมีความล่าช้าเล็กน้อยในการมิเรอร์ระหว่างเวลาที่การเปลี่ยนแปลงปรากฏบนเว็บใน Gerrit และเวลาที่ repo download
สามารถค้นหาการเปลี่ยนแปลงสำหรับผู้ใช้ทั้งหมด
สำหรับทุกอย่าง
repo forall [project-list] -c command
ดำเนินการคำสั่งเชลล์ที่กำหนดในแต่ละโปรเจ็กต์ ตัวแปรสภาพแวดล้อมเพิ่มเติมต่อไปนี้จัดทำขึ้นโดย repo forall
:
REPO_PROJECT
ถูกตั้งค่าเป็นชื่อเฉพาะของโครงการREPO_PATH
เป็นเส้นทางที่สัมพันธ์กับรูทของไคลเอ็นต์REPO_REMOTE
คือชื่อของระบบรีโมตจากไฟล์ ManifestREPO_LREV
คือชื่อของการแก้ไขจากรายการ ซึ่งแปลเป็นสาขาการติดตามในเครื่อง ใช้สิ่งนี้หากคุณต้องการส่งการแก้ไขรายการไปยังคำสั่ง 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_NAME
ให้คำอธิบายสั้นๆ เกี่ยวกับการเปลี่ยนแปลงที่คุณพยายามทำกับโครงการ หากคุณไม่ทราบ ให้พิจารณาใช้ชื่อ default
อาร์กิวเมนต์ project-list
ระบุว่าโครงการใดมีส่วนร่วมในสาขาหัวข้อนี้
หมายเหตุ: จุด ( . ) เป็นการจดชวเลขสำหรับโปรเจ็กต์ในไดเร็กทอรีการทำงานปัจจุบัน
สถานะ
repo status [project-list]
เปรียบเทียบแผนผังการทำงานกับพื้นที่การแสดงละคร (ดัชนี) และการดำเนินการล่าสุดในสาขานี้ (HEAD) ในแต่ละโครงการที่ระบุ แสดงบรรทัดสรุปสำหรับแต่ละไฟล์ที่มีความแตกต่างระหว่างสถานะทั้งสามนี้
หากต้องการดูสถานะของสาขาปัจจุบัน ให้รัน repo status .
. ข้อมูลสถานะจะแสดงรายการตามโครงการ สำหรับแต่ละไฟล์ในโครงการ จะใช้รหัสตัวอักษรสองตัว
ในคอลัมน์แรก ตัวอักษรตัวพิมพ์ใหญ่บ่งชี้ว่าพื้นที่การจัดเตรียมแตกต่างจากสถานะที่คอมมิตครั้งล่าสุดอย่างไร
จดหมาย | ความหมาย | คำอธิบาย |
---|---|---|
- - | ไม่มีการเปลี่ยนแปลง | เหมือนกันใน HEAD และดัชนี |
ก | เพิ่มแล้ว | ไม่ได้อยู่ใน HEAD ในดัชนี |
ม | ดัดแปลง | ใน HEAD แก้ไขในดัชนี |
ดี | ลบแล้ว | ใน HEAD ไม่ใช่ในดัชนี |
ร | เปลี่ยนชื่อแล้ว | ไม่ได้อยู่ใน HEAD เส้นทางมีการเปลี่ยนแปลงในดัชนี |
ค | คัดลอกแล้ว | ไม่ได้อยู่ใน HEAD คัดลอกมาจากที่อื่นในดัชนี |
ต | เปลี่ยนโหมดแล้ว | เนื้อหาเดียวกันใน HEAD และดัชนี โหมดเปลี่ยนไป |
ยู | ยกเลิกการผสาน | ความขัดแย้งระหว่าง HEAD และดัชนี จำเป็นต้องมีความละเอียด |
ในคอลัมน์ที่สอง ตัวอักษรตัวพิมพ์เล็กจะระบุว่าไดเร็กทอรีการทำงานแตกต่างจากดัชนีอย่างไร
จดหมาย | ความหมาย | คำอธิบาย |
---|---|---|
- - | ใหม่/ไม่ทราบ | ไม่ได้อยู่ในดัชนีในแผนผังงาน |
ม | ดัดแปลง | ในดัชนี ในแผนผังงาน แก้ไขแล้ว |
ง | ลบแล้ว | ในดัชนี ไม่ใช่ในแผนผังงาน |
การจัดการข้อผิดพลาด repo
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
ไม่ได้ถูกรันเมื่อเริ่มต้นเซสชัน ในการกู้คืน คุณสามารถตรวจสอบรหัสคอมมิต เริ่มสาขาใหม่ จากนั้นจึงรวมเข้าด้วยกัน