การทำงานกับโค้ด 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] |
สร้าง Branch หัวข้อใหม่ |
git checkout [branch] |
สลับ HEAD ไปยัง Branch ที่ระบุ |
git merge [branch] |
ผสาน [branch] เข้ากับกิ่งปัจจุบัน |
git diff |
แสดงความแตกต่างของการเปลี่ยนแปลงที่ยังไม่ได้จัดทำ |
git diff --cached |
แสดงความแตกต่างของการเปลี่ยนแปลงที่จัดทำ |
git log |
แสดงประวัติของสาขาปัจจุบัน |
git log m/[codeline].. |
แสดงคอมมิตที่ยังไม่ได้พุช |
ดูข้อมูลเกี่ยวกับการใช้ Repo เพื่อดาวน์โหลดแหล่งที่มาได้ที่ ดาวน์โหลดแหล่งที่มาและ การอ้างอิงคำสั่ง Repo
ซิงค์ไคลเอ็นต์
วิธีซิงค์ไฟล์สำหรับโปรเจ็กต์ที่มีอยู่ทั้งหมด
repo sync
วิธีซิงค์ไฟล์สำหรับโปรเจ็กต์ที่เลือก
repo sync PROJECT0 PROJECT1 ... PROJECTN
สร้างกิ่งก้านของหัวข้อ
เริ่ม Branch ของหัวข้อในสภาพแวดล้อมการทำงานในเครื่องทุกครั้งที่คุณเริ่มทำการเปลี่ยนแปลง เช่น เมื่อเริ่มทำงานกับข้อบกพร่องหรือฟีเจอร์ใหม่ Branch ของหัวข้อ ไม่ใช่สำเนาของไฟล์ต้นฉบับ แต่เป็น Pointer ไปยัง คอมมิตที่เฉพาะเจาะจง ซึ่งทำให้การสร้าง Branch ในเครื่องและการสลับระหว่าง Branch เป็นปฏิบัติการที่มีน้ำหนักเบา การใช้กิ่งช่วยให้คุณแยกงานด้านหนึ่ง ออกจากงานอื่นๆ ได้ ดูข้อมูลเพิ่มเติมเกี่ยวกับการใช้กิ่งก้านของหัวข้อได้ที่วิธีแยกกิ่งก้านของหัวข้อ
หากต้องการเริ่มกิ่งหัวข้อโดยใช้ Repo ให้ไปที่โปรเจ็กต์แล้วเรียกใช้คำสั่งต่อไปนี้
repo start BRANCH_NAME .
เครื่องหมายจุดไข่ปลา ( .) แสดงถึงโปรเจ็กต์ในไดเรกทอรีที่ใช้งานอยู่ปัจจุบัน
วิธียืนยันว่ามีการสร้าง Branch ใหม่แล้ว
repo status .
ใช้กิ่งก้านของหัวข้อ
วิธีกำหนดสาขาให้กับโปรเจ็กต์ที่เฉพาะเจาะจง
repo start BRANCH_NAME PROJECT_NAME
ดูรายการโปรเจ็กต์ทั้งหมดได้ที่ที่เก็บ Git ของ Google หากคุณไปยังไดเรกทอรีโปรเจ็กต์แล้ว ให้ใช้จุดเพื่อ แสดงโปรเจ็กต์ปัจจุบัน
วิธีเปลี่ยนไปใช้ Branch อื่นในสภาพแวดล้อมการทำงานในเครื่อง
git checkout BRANCH_NAME
วิธีดูรายการสาขาที่มีอยู่
git branch
หรือ
repo branches
ทั้ง 2 คำสั่งจะแสดงรายการสาขาที่มีอยู่โดยมีชื่อของ สาขาปัจจุบันนำหน้าด้วยเครื่องหมายดอกจัน (*)
พักไฟล์
โดยค่าเริ่มต้น Git จะสังเกตเห็นแต่จะไม่ติดตามการเปลี่ยนแปลงที่คุณทำในโปรเจ็กต์ หากต้องการบอก Git ให้เก็บการเปลี่ยนแปลงไว้ คุณต้องทำเครื่องหมายหรือจัดเตรียมการเปลี่ยนแปลงเหล่านั้นเพื่อรวมไว้ในการคอมมิต
วิธีพักการเปลี่ยนแปลง
git add
คำสั่งนี้ยอมรับอาร์กิวเมนต์สำหรับไฟล์หรือไดเรกทอรีภายในไดเรกทอรีโปรเจ็กต์
แม้ว่าชื่อจะสื่อถึงการเพิ่มไฟล์ลงในที่เก็บ Git แต่ 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
การลบไคลเอ็นต์จะเป็นการลบการเปลี่ยนแปลงที่คุณยังไม่ได้ อัปโหลดเพื่อตรวจสอบโดยถาวร