การทำงานกับโค้ด Android ต้องใช้ Git ซึ่งเป็นระบบควบคุมเวอร์ชันแบบโอเพนซอร์ส และ Repo ซึ่งเป็นเครื่องมือจัดการที่เก็บ ที่ Google สร้างขึ้นและทำงานบน Git หากต้องการดูคำอธิบายเกี่ยวกับความสัมพันธ์ระหว่าง Repo กับ Git รวมถึงลิงก์ไปยังเอกสารประกอบสำหรับเครื่องมือแต่ละรายการ โปรดดู เครื่องมือควบคุมแหล่งที่มา
Flow
การพัฒนา 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
ทั้ง 2 คำสั่งจะแสดงรายการกิ่งก้านที่มีอยู่ โดยมีชื่อกิ่งก้าน ปัจจุบันนำหน้าด้วยเครื่องหมายดอกจัน (*)
การจัดเตรียมไฟล์
โดยค่าเริ่มต้น Git จะสังเกตแต่ไม่ติดตามการเปลี่ยนแปลงที่คุณทำในโปรเจ็กต์ หากต้องการบอกให้ Git เก็บการเปลี่ยนแปลงไว้ คุณต้องทำเครื่องหมายหรือ จัดเตรียม การเปลี่ยนแปลง เหล่านั้นเพื่อรวมไว้ในคอมมิต
วิธีจัดเตรียมการเปลี่ยนแปลง
git add
คำสั่งนี้ยอมรับอาร์กิวเมนต์สำหรับไฟล์หรือไดเรกทอรีภายในไดเรกทอรีโปรเจ็กต์
git add ไม่ได้มีไว้สำหรับเพิ่มไฟล์ลงใน
ที่เก็บ Git เท่านั้น แต่ยังใช้เพื่อจัดเตรียมการแก้ไขและการลบไฟล์ได้ด้วย
การดูสถานะไคลเอ็นต์
วิธีแสดงรายการสถานะของไฟล์
repo status
วิธีดูการแก้ไขที่ไม่ได้คอมมิต (การแก้ไขในเครื่องที่ไม่ได้ ทำเครื่องหมายเพื่อคอมมิต)
repo diff
วิธีดูการแก้ไขที่คอมมิตแล้ว (การแก้ไขในเครื่องที่ ทำเครื่องหมาย เพื่อ
คอมมิต) ให้ตรวจสอบว่าคุณอยู่ในไดเรกทอรีโปรเจ็กต์แล้วเรียกใช้ git
diff ด้วยอาร์กิวเมนต์ cached
cd ~/WORKING_DIRECTORY/PROJECTgit diff --cached
การคอมมิตการเปลี่ยนแปลง
คอมมิต คือหน่วยพื้นฐานของการควบคุมเวอร์ชันใน Git ซึ่งประกอบด้วย สแนปชอตของโครงสร้างไดเรกทอรีและเนื้อหาไฟล์สำหรับทั้งโปรเจ็กต์ ใช้คำสั่งนี้เพื่อสร้างคอมมิตใน Git
git commit
เมื่อระบบขอให้ระบุข้อความคอมมิต ให้ระบุข้อความสั้นๆ (แต่เป็นประโยชน์) สำหรับ การเปลี่ยนแปลงที่ส่งไปยัง AOSP หากคุณไม่เพิ่มข้อความคอมมิต คอมมิตจะไม่สำเร็จ
การอัปโหลดการเปลี่ยนแปลงไปยัง Gerrit
อัปเดตเป็นเวอร์ชันล่าสุด แล้วอัปโหลดการเปลี่ยนแปลง
repo syncrepo upload
คำสั่งเหล่านี้จะแสดงรายการการเปลี่ยนแปลงที่คุณคอมมิตไว้และขอให้คุณ
เลือกกิ่งก้านที่จะอัปโหลดไปยังเซิร์ฟเวอร์ตรวจสอบ หากมีกิ่งก้านเพียงกิ่งเดียว คุณจะเห็นข้อความแจ้ง y/n ง่ายๆ
การแก้ไขความขัดแย้งในการซิงค์
หากคำสั่ง repo sync แสดงความขัดแย้งในการซิงค์ ให้ทำดังนี้
- ดูไฟล์ที่ไม่ได้ผสาน (รหัสสถานะ = U)
- แก้ไขส่วนที่ขัดแย้งตามความจำเป็น
- เปลี่ยนเป็นไดเรกทอรีโปรเจ็กต์ที่เกี่ยวข้อง เพิ่มและคอมมิตไฟล์ที่ได้รับผลกระทบ
แล้วรีเบสการเปลี่ยนแปลง
git add .git commitgit rebase --continue - หลังจากรีเบสเสร็จสมบูรณ์ ให้เริ่มการซิงค์ทั้งหมดอีกครั้ง
repo sync PROJECT0 PROJECT1 ... PROJECTN
การล้างข้อมูลไคลเอ็นต์
หลังจากผสานการเปลี่ยนแปลงไปยัง Gerrit แล้ว ให้อัปเดตไดเรกทอรีที่ใช้งานในเครื่อง จากนั้นใช้
repo prune เพื่อนำกิ่งก้านหัวข้อที่ล้าสมัยออกอย่างปลอดภัย
repo syncrepo prune
การลบไคลเอ็นต์
เนื่องจากข้อมูลสถานะทั้งหมดจัดเก็บไว้ในไคลเอ็นต์ คุณจึงต้อง ลบไดเรกทอรีออกจากระบบไฟล์เท่านั้น
rm -rf WORKING_DIRECTORY
การลบไคลเอ็นต์จะ ลบ การเปลี่ยนแปลงที่คุณยังไม่ได้ อัปโหลดเพื่อตรวจสอบอย่างถาวร