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

การทำงานกับโค้ด 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 เท่านั้น นอกจากนี้ยังสามารถใช้เพื่อแก้ไขและลบไฟล์ได้

กำลังดูสถานะลูกค้า

ในการแสดงรายการสถานะของไฟล์:

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

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