การส่งแพตช์

หน้านี้อธิบายขั้นตอนทั้งหมดในการส่งโปรแกรมแก้ไขไปยัง Android Open Source Project (AOSP) รวมถึงวิธีขอรับการตรวจสอบและติดตามการเปลี่ยนแปลงของคุณด้วย Gerrit

ข้อกำหนดเบื้องต้น

ในการเริ่มต้น ตรวจสอบให้แน่ใจว่าคุณได้ทำสิ่งต่อไปนี้:

ทรัพยากร

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

สำหรับผู้มีส่วนร่วม

กำลังตรวจสอบกับเซิร์ฟเวอร์

หากคุณแบ่งปันที่อยู่ IP กับผู้ใช้รายอื่น โควต้าสามารถถูกเรียกใช้ได้แม้ในรูปแบบการใช้งานปกติ กรณีนี้อาจเกิดขึ้นได้ ตัวอย่างเช่น ผู้ใช้จำนวนมากซิงค์ไคลเอ็นต์ใหม่จากที่อยู่ IP เดียวกันภายในระยะเวลาสั้นๆ การเข้าถึงที่รับรองความถูกต้องจะใช้โควต้าแยกต่างหากสำหรับผู้ใช้แต่ละราย โดยไม่คำนึงถึงที่อยู่ IP หากต้องการอ่านเกี่ยวกับการเปิดใช้งานการเข้าถึงที่รับรองความถูกต้อง โปรดดู การใช้การพิสูจน์ตัวตน

เริ่มต้นสาขา Repo

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

repo start NAME .

คุณสามารถเริ่มต้นสาขาอิสระหลายสาขาพร้อมกันในที่เก็บเดียวกัน สาขา NAME อยู่ในพื้นที่ทำงานของคุณ และไม่ได้รวมอยู่ใน Gerrit หรือในแผนผังต้นทางสุดท้าย

การเปลี่ยนแปลงของคุณ

แก้ไขไฟล์ต้นฉบับ และตรวจสอบการเปลี่ยนแปลงของคุณ

ยอมรับการเปลี่ยนแปลงในที่เก็บโลคัลของคุณด้วยคำสั่งเหล่านี้:

git add -A
git commit -s

เปลี่ยนคำอธิบาย

  • บรรทัดที่ 1: พาดหัว

    ระบุข้อมูลสรุปหนึ่งบรรทัด ( สูงสุด 50 อักขระ )

    รูปแบบนี้ถูกใช้โดย Git และ Gerrit สำหรับการแสดงผลต่างๆ เป็นส่วนที่สำคัญที่สุดและหนาแน่นที่สุดของข้อความยืนยันของคุณ ลองใช้คำนำหน้าเพื่ออธิบายพื้นที่ที่คุณเปลี่ยนแปลง ตามด้วยคำอธิบายการเปลี่ยนแปลงที่คุณทำในคอมมิตนี้ เช่น อันที่มี ui เป็นคำนำหน้า:

    ui: Removes deprecated widget

  • บรรทัดที่ 2: ว่างเปล่า

    เว้นบรรทัดนี้ว่างไว้เสมอ

  • บรรทัดที่ 3: ร่างกาย

    เขียนคำอธิบายให้ยาวขึ้นโดยเริ่มจากบรรทัดนี้

    สิ่งนี้ต้องหุ้มอย่างแน่นหนาที่อักขระสูงสุด 72 ตัว อธิบายว่าการเปลี่ยนแปลงแก้ไขปัญหาใดได้บ้าง และอย่างไร แม้ว่านี่จะเป็นทางเลือกเมื่อใช้งานคุณลักษณะใหม่ แต่จะเป็นประโยชน์กับผู้อื่นในภายหลังหากพวกเขาอ้างถึงการเปลี่ยนแปลงนี้ โดยเฉพาะอย่างยิ่งสำหรับการแก้ไขข้อบกพร่อง

    รวมหมายเหตุสั้นๆ เกี่ยวกับสมมติฐานหรือข้อมูลเบื้องหลังที่อาจมีความสำคัญเมื่อผู้ร่วมให้ข้อมูลรายอื่นทำงานในคุณลักษณะนี้

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

นี่คือตัวอย่างข้อความยืนยัน:

Line 1, Headline - a short description

Line 3, Body - Add the detailed description of your patch here. Use as many lines
as needed. You can write an overall description, then list specifics.

I6e3c64e7a:Added a new widget.
I60c539a8f:Fixed the spinning image.
หากต้องการอ่านบล็อกเกี่ยวกับคำอธิบายที่ดี (พร้อมตัวอย่าง) โปรดดู วิธีเขียนข้อความ Git Commit โดย Chris Beams

กำลังอัปโหลดไปยัง Gerrit

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

repo upload

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

หลังจากการอัปโหลดสำเร็จ Repo จะให้ URL ของหน้าใหม่ใน Gerrit แก่คุณ คลิกลิงก์ที่ Repo ให้คุณดูโปรแกรมแก้ไขของคุณบนเซิร์ฟเวอร์ตรวจสอบ เพิ่มความคิดเห็น หรือขอผู้ตรวจสอบเฉพาะสำหรับโปรแกรมแก้ไขของคุณ

ขอรับการตรวจทาน

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

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

  1. เลือกลิงก์ SUGGEST OWNERS ใน Gerrit UI เพื่อดูรายชื่อเจ้าของโค้ดสำหรับไฟล์ในแพตช์ของคุณ

    แนะนำเจ้าของลิงค์ใน Gerrit
    รูปที่ 1. ลิงก์แนะนำเจ้าของใน Gerrit
  2. เพิ่มเจ้าของรหัสจากรายการเป็นผู้ตรวจสอบสำหรับโปรแกรมแก้ไขของคุณ

ในการพิจารณาสถานะของไฟล์ในโปรแกรมแก้ไขของคุณ ให้ตรวจสอบไอคอนต่อไปนี้ถัดจากไฟล์ในโปรแกรมแก้ไข

  • (ไอคอนเครื่องหมายถูก): อนุมัติโดยเจ้าของรหัส
  • (ไอคอนกากบาท): ไม่ได้รับการอนุมัติจากเจ้าของรหัส
  • (ไอคอนนาฬิกา): รอการอนุมัติจากเจ้าของรหัส
รูปที่ 2. ตัวอย่างไฟล์ที่มีไอคอนแสดงสถานะการอนุมัติของเจ้าของรหัส

กำลังอัปโหลดโปรแกรมแก้ไขทดแทน replacement

สมมติว่าผู้ตรวจทานดูแพตช์ของคุณและขอแก้ไขเล็กน้อย คุณสามารถแก้ไขการคอมมิตภายใน Git ได้ ซึ่งส่งผลให้มีแพตช์ใหม่ใน Gerrit ที่มีรหัสการเปลี่ยนแปลงเดียวกันกับต้นฉบับ

git add -A
git commit --amend

เมื่อคุณอัปโหลดแพตช์ที่แก้ไขแล้ว แพตช์นั้นจะแทนที่แพตช์ดั้งเดิมทั้งใน Gerrit และในประวัติ Git ในพื้นที่ของคุณ

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

หากแพตช์อื่นๆ ถูกส่งไปยังทรีต้นทางที่ขัดแย้งกับคุณ ให้ทำการรีเบสแพตช์ของคุณที่ด้านบนของ HEAD ใหม่ของที่เก็บซอร์ส โดยเรียกใช้คำสั่งนี้:

repo sync

คำสั่ง repo sync ดึงข้อมูลอัพเดตจากเซิร์ฟเวอร์ต้นทาง จากนั้นจะพยายามรีเบส HEAD ของคุณไปยัง HEAD ระยะไกลใหม่โดยอัตโนมัติ

หากการรีเบสอัตโนมัติไม่สำเร็จ ให้ทำการรีเบสด้วยตนเอง

repo rebase

เครื่องมืออื่นสำหรับจัดการกับข้อขัดแย้งในการ git mergetool คือ git mergetool เมื่อคุณรวมไฟล์ที่ขัดแย้งกันสำเร็จแล้ว ให้รันคำสั่งนี้:

git rebase --continue

หลังจากการรีเบสแบบอัตโนมัติหรือด้วยตนเองเสร็จสิ้น ให้รันการ repo upload เพื่อส่งแพตช์ที่อ้างอิงใหม่

หลังจากส่งได้รับการอนุมัติ submission

หลังจากที่ส่งผ่านกระบวนการตรวจสอบและยืนยันแล้ว Gerrit จะรวมการเปลี่ยนแปลงลงในที่เก็บข้อมูลสาธารณะโดยอัตโนมัติ ผู้ใช้รายอื่นสามารถเรียกใช้การ repo sync เพื่อดึงการอัปเดตไปยังไคลเอ็นต์ในพื้นที่ของตน

สำหรับโครงการต้นน้ำ

Android ใช้ประโยชน์จากโครงการโอเพนซอร์สอื่นๆ จำนวนมาก เช่น เคอร์เนล Linux และ WebKit ตามที่อธิบายไว้ใน Android Software Management สำหรับโปรเจ็กต์ส่วนใหญ่ที่อยู่ภายใต้ external/ ให้ทำการเปลี่ยนแปลงอัปสตรีม จากนั้นแจ้งผู้ดูแล Android เกี่ยวกับอัปสตรีมรีลีสใหม่ที่มีการเปลี่ยนแปลงของคุณ

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

กรณีพิเศษที่น่าสนใจอย่างหนึ่งคือไบโอนิค โค้ดส่วนใหญ่มาจาก BSD ดังนั้นเว้นแต่ว่าการเปลี่ยนแปลงจะเป็นโค้ดที่ใหม่สำหรับ Bionic โปรดทำการแก้ไขอัปสตรีม จากนั้นดึงไฟล์ใหม่ทั้งหมดจาก BSD ที่เหมาะสม

Android Kernel

ต้องการทำการเปลี่ยนแปลงทั้งหมดต้นน้ำ สำหรับคำแนะนำทั่วไป ให้ปฏิบัติตาม หลักเกณฑ์การสนับสนุนเคอร์เนลของ Android

ICU4C

ทำการเปลี่ยนแปลงทั้งหมดในโครงการ ICU4C ที่ external/icu4c บน external/icu4c ICU-TC ดูการ ส่งข้อบกพร่องของ ICU และคำขอคุณสมบัติ สำหรับข้อมูลเพิ่มเติม

LLVM/Clang/Compiler-rt

ทำการเปลี่ยนแปลงทั้งหมดกับโปรเจ็กต์ที่เกี่ยวข้องกับ LLVM ( external/clang , external/compiler-rt , external/llvm ) บนหน้า LLVM Compiler Infrastructure

mksh

ทำการเปลี่ยนแปลงทั้งหมดกับโครงการ MirBSD Korn Shell ที่ external/mksh โดยส่งอีเมลไปที่ miros-mksh บนโดเมน mirbsd.org (ไม่ต้องสมัครสมาชิกเพื่อส่งที่นั่น) หรือที่ Launchpad

OpenSSL

ทำการเปลี่ยนแปลงทั้งหมดในโปรเจ็กต์ OpenSSL ที่ external/openssl บน หน้า OpenSSL

V8

ส่งการเปลี่ยนแปลงทั้งหมดไปยังโครงการ V8 ที่ external/v8 ใน หน้าปัญหา V8 ดูการมี ส่วนร่วมใน V8 สำหรับรายละเอียด

WebKit

ทำการเปลี่ยนแปลงทั้งหมดกับโปรเจ็กต์ WebKit ที่ external/webkit บน หน้า WebKit เริ่มกระบวนการโดยแจ้ง ข้อบกพร่องของ WebKit ในจุดบกพร่อง ให้ใช้ Android สำหรับช่อง แพลตฟอร์ม และ ระบบปฏิบัติการ เฉพาะในกรณีที่จุดบกพร่องนั้นเจาะจงสำหรับ Android ข้อบกพร่องมักจะได้รับความสนใจจากผู้ตรวจสอบหลังจากเพิ่มการแก้ไขที่เสนอและรวมการทดสอบแล้ว ดู รหัสสนับสนุนไปยัง WebKit สำหรับรายละเอียด

zlib

ทำการเปลี่ยนแปลงทั้งหมดกับโปรเจ็กต์ zlib ที่ external/zlib บน โฮมเพจ zlib