การทำงานกับโค้ด Android ต้องใช้ Git (ระบบควบคุมเวอร์ชันแบบโอเพนซอร์ส) และ Repo (เครื่องมือจัดการที่เก็บข้อมูลที่ Google สร้างขึ้นซึ่งทำงานบน Git) ดูคำอธิบายความสัมพันธ์ระหว่าง Repo กับ Git และลิงก์ไปยังเอกสารประกอบสนับสนุนสำหรับเครื่องมือแต่ละรายการได้ที่เครื่องมือควบคุมแหล่งที่มา
น้ำไหล
การพัฒนา Android ประกอบด้วยเวิร์กโฟลว์พื้นฐานต่อไปนี้
- เริ่มสาขาหัวข้อใหม่โดยใช้
repo start
- แก้ไขไฟล์
- เปลี่ยนระยะโดยใช้
git add
- บันทึกการเปลี่ยนแปลงโดยใช้
git commit
- อัปโหลดการเปลี่ยนแปลงไปยังเซิร์ฟเวอร์ตรวจสอบโดยใช้
repo upload
Tasks
การใช้ 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 syncPROJECT0 PROJECT1 ... PROJECTN
การสร้างสาขาหัวข้อ
เริ่มสาขาหัวข้อในสภาพแวดล้อมการทำงานในพื้นที่ทุกครั้งที่คุณเริ่มทำการเปลี่ยนแปลง เช่น เมื่อเริ่มทำงานกับข้อบกพร่องหรือฟีเจอร์ใหม่ สาขาหัวข้อไม่ใช่สำเนาของไฟล์ต้นฉบับ แต่เป็นเคอร์เซอร์ไปยังการคอมมิตหนึ่งๆ ซึ่งทำให้การสร้างสาขาในเครื่องและการสลับใช้สาขาต่างๆ เป็นการดำเนินการที่ไม่หนักมาก การใช้สาขาช่วยให้คุณแยกแง่มุมหนึ่งๆ ของงานออกจากแง่มุมอื่นๆ ได้ อ่านบทความที่น่าสนใจเกี่ยวกับการใช้สาขาหัวข้อได้ที่การแยกสาขาหัวข้อ
หากต้องการเริ่มสาขาหัวข้อโดยใช้ Repo ให้ไปที่โปรเจ็กต์แล้วเรียกใช้คำสั่งต่อไปนี้
repo startBRANCH_NAME .
เครื่องหมายจุดตามหลัง ( .
) แสดงถึงโปรเจ็กต์ในไดเรกทอรีที่ใช้งานอยู่ในปัจจุบัน
วิธียืนยันว่ามีการสร้างสาขาใหม่แล้ว
repo status .
การใช้สาขาหัวข้อ
วิธีมอบหมายสาขาให้กับโปรเจ็กต์ที่ต้องการ
repo startBRANCH_NAME PROJECT_NAME
ดูรายการโปรเจ็กต์ทั้งหมดได้ที่ android.googlesource.com หากไปยังไดเรกทอรีโปรเจ็กต์แล้ว ให้ใช้เครื่องหมายจุดเพื่อแสดงโปรเจ็กต์ปัจจุบัน
วิธีเปลี่ยนไปใช้สาขาอื่นในสภาพแวดล้อมการทำงานในเครื่อง
git checkoutBRANCH_NAME
วิธีดูรายการสาขาที่มีอยู่
git branch
หรือ
repo branches
ทั้ง 2 คำสั่งจะแสดงรายการสาขาที่มีอยู่พร้อมชื่อสาขาปัจจุบันที่มีเครื่องหมายดอกจัน (*) อยู่ข้างหน้า
ไฟล์ที่เตรียมไว้
โดยค่าเริ่มต้น 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 -rfWORKING_DIRECTORY
การลบลูกค้าจะลบการเปลี่ยนแปลงทั้งหมดที่คุณยังไม่ได้อัปโหลดให้ตรวจสอบอย่างถาวร