เวิร์กโฟลว์การควบคุมแหล่งที่มา

การทำงานกับโค้ด Android ต้องใช้ Git (ระบบควบคุมเวอร์ชันแบบโอเพนซอร์ส) และ Repo (เครื่องมือจัดการที่เก็บข้อมูลที่ Google สร้างขึ้นซึ่งทำงานบน Git) ดูคำอธิบายความสัมพันธ์ระหว่าง Repo กับ Git และลิงก์ไปยังเอกสารประกอบสนับสนุนสำหรับเครื่องมือแต่ละรายการได้ที่เครื่องมือควบคุมแหล่งที่มา

น้ำไหล

การพัฒนา Android ประกอบด้วยเวิร์กโฟลว์พื้นฐานต่อไปนี้

  1. เริ่มสาขาหัวข้อใหม่โดยใช้ repo start
  2. แก้ไขไฟล์
  3. เปลี่ยนระยะโดยใช้ git add
  4. บันทึกการเปลี่ยนแปลงโดยใช้ git commit
  5. อัปโหลดการเปลี่ยนแปลงไปยังเซิร์ฟเวอร์ตรวจสอบโดยใช้ 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 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/PROJECT
git diff --cached

การทำการเปลี่ยนแปลง

การคอมมิตคือหน่วยพื้นฐานของการควบคุมการแก้ไขใน Git และประกอบด้วยสแนปชอตของโครงสร้างไดเรกทอรีและเนื้อหาไฟล์ของทั้งโปรเจ็กต์ ใช้คำสั่งนี้เพื่อสร้างการคอมมิตใน Git

git commit

เมื่อได้รับข้อความแจ้งให้ระบุข้อความคอมมิต ให้ระบุข้อความสั้นๆ (แต่เป็นประโยชน์) สำหรับการเปลี่ยนแปลงที่ส่งไปยัง AOSP หากไม่เพิ่มข้อความคอมมิต การคอมมิตจะดำเนินการไม่สำเร็จ

การอัปโหลดการเปลี่ยนแปลงไปยัง Gerrit

อัปเดตเป็นฉบับแก้ไขล่าสุด แล้วอัปโหลดการเปลี่ยนแปลงโดยทำดังนี้

repo sync
repo upload

คำสั่งเหล่านี้จะแสดงรายการการเปลี่ยนแปลงที่คุณคอมมิตไว้และแจ้งให้คุณเลือกสาขาที่จะอัปโหลดไปยังเซิร์ฟเวอร์ตรวจสอบ หากมีสาขาเดียว คุณจะเห็นข้อความแจ้ง y/n ง่ายๆ

การแก้ไขความขัดแย้งในการซิงค์

หากคำสั่ง repo sync แสดงการซิงค์ขัดแย้ง ให้ทำดังนี้

  1. ดูไฟล์ที่ยกเลิกการผสาน (รหัสสถานะ = U)
  2. แก้ไขภูมิภาคที่มีความขัดแย้งตามที่จำเป็น
  3. เปลี่ยนไปยังไดเรกทอรีโปรเจ็กต์ที่เกี่ยวข้อง เพิ่มและคอมมิตไฟล์ที่ได้รับผลกระทบ แล้วเปลี่ยนฐานของการเปลี่ยนแปลงใหม่โดยทำดังนี้
    git add .
    git commit
    git rebase --continue
    
  4. หลังจากการย้ายฐานเสร็จสมบูรณ์แล้ว ให้เริ่มการซิงค์ทั้งหมดอีกครั้งโดยทำดังนี้
    repo sync PROJECT0 PROJECT1 ... PROJECTN
    

ล้างข้อมูลไคลเอ็นต์

หลังจากผสานการเปลี่ยนแปลงใน Gerrit แล้ว ให้อัปเดตไดเรกทอรีทํางานในเครื่อง จากนั้นใช้ repo prune เพื่อนำสาขาหัวข้อที่ล้าสมัยออกอย่างปลอดภัย โดยทำดังนี้

repo sync
repo prune

การลบไคลเอ็นต์

เนื่องจากระบบจะจัดเก็บข้อมูลสถานะทั้งหมดไว้ในไคลเอ็นต์ คุณจึงต้องลบไดเรกทอรีออกจากระบบไฟล์เท่านั้น โดยทำดังนี้

rm -rf WORKING_DIRECTORY

การลบลูกค้าจะลบการเปลี่ยนแปลงทั้งหมดที่คุณยังไม่ได้อัปโหลดให้ตรวจสอบอย่างถาวร