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

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

ไหล

การพัฒนา 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] สร้างสาขาหัวข้อใหม่
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

คำสั่งทั้งสองส่งคืนรายการสาขาที่มีอยู่โดยมีชื่อของสาขาปัจจุบันนำหน้าด้วยเครื่องหมายดอกจัน (*)

ไฟล์การแสดงละคร

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

ในขั้นตอนการเปลี่ยนแปลง:

git add

คำสั่งนี้ยอมรับอาร์กิวเมนต์สำหรับไฟล์หรือไดเร็กทอรีภายในไดเร็กทอรีโปรเจ็กต์ แม้จะมีชื่อนี้ git add ไม่เพียงแต่เพิ่มไฟล์ลงในที่เก็บ Git เท่านั้น แต่ยังเพิ่มไฟล์ลงในที่เก็บ 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

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