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 ที่จะดึงข้อมูลที่เก็บรายการ พบไฟล์ Manifest ทั่วไปที่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 ส่งผลให้เกิดข้อขัดแย้งในการผสาน ให้ใช้คำสั่ง 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
เพื่ออัปเดตการคอมมิตในพื้นที่ของคุณ หลังจากแก้ไขเสร็จแล้ว:
- ตรวจสอบว่าสาขาที่อัปเดตเป็นสาขาที่เช็คเอาท์ในปัจจุบัน
- สำหรับแต่ละคอมมิตในซีรีส์ ให้ป้อน Gerrit change ID ภายในวงเล็บ:
# 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 ลงในไดเร็กทอรี platform/build ของคุณ:
repo download platform/build 23823
การรันการ repo sync
จะลบการคอมมิตที่ดึงกลับมาด้วย repo download
หรือคุณสามารถตรวจสอบสาขาระยะไกลได้โดยใช้ git checkout m/master
หมายเหตุ: มีความล่าช้าในการจำลองแบบไปยังเซิร์ฟเวอร์ทั้งหมดทั่วโลก ดังนั้นจึงมีความล่าช้าเล็กน้อยในการมิเรอร์ระหว่างเวลาที่การเปลี่ยนแปลงปรากฏบนเว็บใน Gerrit และเมื่อ repo download
สามารถค้นหาการเปลี่ยนแปลงสำหรับผู้ใช้ทั้งหมดได้
สำหรับทุกอย่าง
repo forall [project-list] -c command
ดำเนินการคำสั่งเชลล์ที่กำหนดในแต่ละโปรเจ็กต์ ตัวแปรสภาพแวดล้อมเพิ่มเติมต่อไปนี้มีให้โดย repo forall
:
REPO_PROJECT
ถูกตั้งค่าเป็นชื่อเฉพาะของโปรเจ็กต์REPO_PATH
คือพาธที่สัมพันธ์กับรูทของไคลเอ็นต์REPO_REMOTE
คือชื่อของระบบรีโมตจากรายการREPO_LREV
เป็นชื่อของการแก้ไขจากรายการ แปลเป็นสาขาการติดตามในพื้นที่ ใช้สิ่งนี้หากคุณต้องการส่งการแก้ไขรายการไปยังคำสั่ง Git ที่ดำเนินการในเครื่องREPO_RREV
คือชื่อของการแก้ไขจากรายการ ตรงตามที่เขียนไว้ในไฟล์ 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 และ index |
อา | เพิ่ม | ไม่อยู่ใน HEAD ใน index |
เอ็ม | ดัดแปลง | ใน HEAD แก้ไขใน index |
ดี | ถูกลบ | ใน HEAD ไม่ใช่ใน index |
R | เปลี่ยนชื่อ | ไม่อยู่ใน HEAD เปลี่ยนเส้นทางใน index |
ค | คัดลอกแล้ว | ไม่อยู่ใน HEAD คัดลอกมาจากที่อื่นใน index |
ตู่ | เปลี่ยนโหมดแล้ว | เนื้อหาเดียวกันใน HEAD และดัชนี โหมดเปลี่ยน |
ยู | ยกเลิกการผสาน | ความขัดแย้งระหว่าง HEAD และดัชนี; ความละเอียดที่ต้องการ |
ในคอลัมน์ที่สอง อักษรตัวพิมพ์เล็กระบุว่าไดเร็กทอรีการทำงานแตกต่างจากดัชนีอย่างไร
จดหมาย | ความหมาย | คำอธิบาย |
---|---|---|
- | ใหม่/ไม่รู้จัก | ไม่อยู่ในดัชนี ในแผนผังงาน |
ม | ดัดแปลง | ในดัชนี ในแผนผังงาน แก้ไข |
d | ถูกลบ | ในดัชนี ไม่ใช่ในแผนผังงาน |
การจัดการข้อผิดพลาด 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
ไม่ได้รันเมื่อเริ่มต้นเซสชัน ในการกู้คืน คุณสามารถตรวจสอบรหัสการคอมมิต เริ่มสาขาใหม่แล้วรวมเข้าด้วยกัน