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