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

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

Flow

การพัฒนา Android มีเวิร์กโฟลว์พื้นฐานดังนี้

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

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