การทำงานกับโค้ด Android ต้องใช้ Git (ระบบควบคุมเวอร์ชันโอเพ่นซอร์ส) และ Repo (เครื่องมือจัดการพื้นที่เก็บข้อมูลที่สร้างโดย Google ซึ่งทำงานบน Git) ดู เครื่องมือควบคุมแหล่งที่มา สำหรับคำอธิบายความสัมพันธ์ระหว่าง Repo และ Git และลิงก์ไปยังเอกสารประกอบสำหรับแต่ละเครื่องมือ
ไหล
การพัฒนา Android เกี่ยวข้องกับเวิร์กโฟลว์พื้นฐานต่อไปนี้:
- เริ่มหัวข้อใหม่โดยใช้
repo start
- แก้ไขไฟล์.
- การเปลี่ยนแปลงขั้นตอนโดยใช้
git add
- คอมมิตการเปลี่ยนแปลงโดยใช้
git commit
- อัปโหลดการเปลี่ยนแปลงไปยังเซิร์ฟเวอร์ตรวจสอบโดยใช้การ
repo upload
งาน
การทำงานกับ Git และ Repo ในที่เก็บโค้ดของ Android เกี่ยวข้องกับการทำงานทั่วไปต่อไปนี้
สั่งการ | คำอธิบาย |
---|---|
repo init | เริ่มต้นไคลเอนต์ใหม่ |
repo sync | ซิงค์ไคลเอ็นต์กับที่เก็บ |
repo start | เปิดสาขาใหม่. |
repo status | แสดงสถานะของสาขาปัจจุบัน |
repo upload | อัปโหลดการเปลี่ยนแปลงไปยังเซิร์ฟเวอร์ตรวจสอบ |
git add | สเตจไฟล์ |
git commit | คอมมิตไฟล์ที่จัดฉาก |
git branch | แสดงสาขาปัจจุบัน |
git branch [branch] | สร้างสาขาหัวข้อใหม่ |
git checkout [branch] | สลับ HEAD ไปยังสาขาที่ระบุ |
git merge [branch] | รวม [branch] เข้ากับสาขาปัจจุบัน |
git diff | แสดงความแตกต่างของการเปลี่ยนแปลงที่ไม่ได้จัดฉาก |
git diff --cached | แสดงความต่างของการเปลี่ยนแปลงที่จัดฉาก |
git log | แสดงประวัติสาขาปัจจุบัน |
git log m/[codeline].. | แสดงการคอมมิตที่ไม่ได้พุช |
สำหรับข้อมูลเกี่ยวกับการใช้ Repo เพื่อดาวน์โหลดซอร์ส โปรดดู ที่ การดาวน์โหลดซอร์ส และการ อ้างอิงคำสั่ง Repo
การซิงโครไนซ์ลูกค้า
ในการซิงโครไนซ์ไฟล์สำหรับโปรเจ็กต์ที่มีทั้งหมด:
repo sync
ในการซิงโครไนซ์ไฟล์สำหรับโครงการที่เลือก:
repo sync PROJECT0 PROJECT1 ... PROJECTN
การสร้างสาขาหัวข้อ
เริ่มสาขาของหัวข้อในสภาพแวดล้อมการทำงานในพื้นที่ของคุณทุกครั้งที่คุณเริ่มการเปลี่ยนแปลง เช่น เมื่อคุณเริ่มทำงานกับจุดบกพร่องหรือคุณลักษณะใหม่ สาขาหัวข้อ ไม่ใช่ สำเนาของไฟล์ต้นฉบับ มันเป็นตัวชี้ไปยังการคอมมิตเฉพาะ ซึ่งทำให้การสร้างสาขาในพื้นที่และการสลับไปมาระหว่างกันนั้นเป็นการดำเนินการที่เบา เมื่อใช้สาขา คุณจะแยกงานของคุณออกจากด้านอื่นๆ ได้ สำหรับบทความที่น่าสนใจเกี่ยวกับการใช้สาขาของหัวข้อ โปรดดูที่ การ แยกสาขาของหัวข้อ
ในการเริ่มต้นสาขาหัวข้อโดยใช้ Repo ให้ไปที่โครงการและเรียกใช้:
repo start BRANCH_NAME .
ช่วงต่อท้าย ( .
) แสดงถึงโครงการในไดเร็กทอรีการทำงานปัจจุบัน
ในการตรวจสอบว่ามีการสร้างสาขาใหม่:
repo status .
การใช้สาขาหัวข้อ
ในการกำหนดสาขาให้กับโครงการเฉพาะ:
repo start BRANCH_NAME PROJECT_NAME
สำหรับรายการโครงการทั้งหมด โปรดดูที่ android.googlesource.com หากคุณได้ไปที่ไดเร็กทอรีโครงการแล้ว เพียงใช้จุดเพื่อแสดงโครงการปัจจุบัน
ในการเปลี่ยนไปใช้สาขาอื่นในสภาพแวดล้อมการทำงานในพื้นที่ของคุณ:
git checkout BRANCH_NAME
ดูรายชื่อสาขาที่มีอยู่:
git branch
หรือ
repo branches
คำสั่งทั้งสองจะส่งคืนรายการสาขาที่มีอยู่ด้วยชื่อของสาขาปัจจุบันที่นำหน้าด้วยเครื่องหมายดอกจัน (*)
ไฟล์การแสดงละคร
ตามค่าเริ่มต้น Git จะแจ้งให้ทราบแต่ไม่ได้ติดตามการเปลี่ยนแปลงที่คุณทำในโปรเจ็กต์ หากต้องการบอกให้ Git รักษาการเปลี่ยนแปลงของคุณ คุณต้องทำเครื่องหมายหรือ จัดระยะ การเปลี่ยนแปลงเหล่านั้นเพื่อรวมไว้ในคอมมิต
การเปลี่ยนแปลงขั้นตอน:
git add
คำสั่งนี้ยอมรับอาร์กิวเมนต์สำหรับไฟล์หรือไดเร็กทอรีภายในไดเร็กทอรีโครงการ แม้จะมีชื่อ git add
ไม่ได้เพียงแค่เพิ่มไฟล์ไปยังที่เก็บ Git เท่านั้น นอกจากนี้ยังสามารถใช้เพื่อแก้ไขและลบไฟล์ได้
กำลังดูสถานะลูกค้า
ในการแสดงรายการสถานะของไฟล์:
repo status
หากต้องการดูการแก้ไขที่ไม่มีการคอมมิต (การแก้ไขในเครื่องที่ ไม่ได้ ทำเครื่องหมายสำหรับการคอมมิต):
repo diff
หากต้องการดูการแก้ไขที่คอมมิต (การแก้ไขที่ ทำเครื่องหมายไว้ สำหรับการคอมมิต) ตรวจสอบให้แน่ใจว่าคุณอยู่ในไดเรกทอรีของโปรเจ็กต์ จากนั้นรัน git diff
ด้วยอาร์กิวเมนต์ที่ cached
:
cd ~/WORKING_DIRECTORY/PROJECT
git diff --cached
การเปลี่ยนแปลงที่มุ่งมั่น
คอมมิต เป็นหน่วยพื้นฐานของการควบคุมการแก้ไขใน Git และประกอบด้วยสแน็ปช็อตของโครงสร้างไดเร็กทอรีและเนื้อหาไฟล์สำหรับทั้งโปรเจ็กต์ ใช้คำสั่งนี้เพื่อสร้างคอมมิตใน Git:
git commit
เมื่อได้รับพร้อมท์สำหรับข้อความยืนยัน ให้ระบุข้อความสั้นๆ (แต่มีประโยชน์) สำหรับการเปลี่ยนแปลงที่ส่งไปยัง AOSP หากคุณไม่เพิ่มข้อความยืนยัน การคอมมิตจะล้มเหลว
กำลังอัปโหลดการเปลี่ยนแปลงไปยัง Gerrit
อัปเดตเป็นเวอร์ชันล่าสุด แล้วอัปโหลดการเปลี่ยนแปลง:
repo sync
repo upload
คำสั่งเหล่านี้จะส่งคืนรายการการเปลี่ยนแปลงที่คุณคอมมิต และแจ้งให้คุณเลือกสาขาที่จะอัปโหลดไปยังเซิร์ฟเวอร์ตรวจสอบ หากมีเพียงสาขาเดียว คุณจะเห็นพรอมต์ y/n
แบบง่าย
การแก้ไขข้อขัดแย้งในการซิงค์
หากคำสั่ง repo sync
ส่งคืนข้อขัดแย้งในการซิงค์:
- ดูไฟล์ที่ยังไม่ได้รวม (รหัสสถานะ = U)
- แก้ไขขอบเขตความขัดแย้งตามความจำเป็น
- เปลี่ยนเป็นไดเร็กทอรีโครงการที่เกี่ยวข้อง เพิ่มและคอมมิตไฟล์ที่ได้รับผลกระทบ จากนั้นทำการรีเบสการเปลี่ยนแปลง:
git add .
git commit
git rebase --continue
- หลังจากรีเบสเสร็จสิ้น ให้เริ่มการซิงค์ทั้งหมดอีกครั้ง:
repo sync PROJECT0 PROJECT1 ... PROJECTN
ทำความสะอาดลูกค้า
หลังจากรวมการเปลี่ยนแปลงเข้ากับ Gerrit แล้ว ให้อัปเดตไดเร็กทอรีการทำงานในเครื่องของคุณ จากนั้นใช้ repo prune
เพื่อลบสาขาของหัวข้อที่เก่าแล้วออกอย่างปลอดภัย:
repo sync
repo prune
กำลังลบลูกค้า
เนื่องจากข้อมูลสถานะทั้งหมดถูกเก็บไว้ในไคลเอนต์ของคุณ คุณเพียงแค่ต้องลบไดเร็กทอรีออกจากระบบไฟล์ของคุณ:
rm -rf WORKING_DIRECTORY
การลบลูกค้า จะลบการเปลี่ยนแปลงที่คุณไม่ได้อัปโหลดเพื่อตรวจสอบอย่างถาวร