Trang này mô tả toàn bộ quy trình gửi bản vá cho Dự án nguồn mở Android (AOSP), bao gồm cách yêu cầu xem xét và theo dõi các thay đổi của bạn với Gerrit .
Điều kiện tiên quyết
Để bắt đầu, hãy đảm bảo bạn đã thực hiện những điều sau:
- Đã khởi tạo môi trường xây dựng của bạn
- Đã tải xuống nguồn
- Đã tạo mật khẩu bằng trình tạo mật khẩu.
Tài nguyên
- Để biết chi tiết về Repo và Git, hãy xem trang Công cụ kiểm soát nguồn .
- Để biết thông tin về các vai trò khác nhau trong cộng đồng Mã nguồn mở Android, hãy xem trang Vai trò dự án .
- Để biết thông tin cấp phép về việc đóng góp mã cho nền tảng Android, hãy xem trang Giấy phép .
Đối với những người đóng góp
Xác thực với máy chủ
Nếu bạn chia sẻ địa chỉ IP với người dùng khác, hạn ngạch có thể được kích hoạt ngay cả đối với các kiểu sử dụng thông thường. Điều này có thể xảy ra khi, chẳng hạn, nhiều người dùng đồng bộ hóa các máy khách mới từ cùng một địa chỉ IP trong một khoảng thời gian ngắn. Quyền truy cập được xác thực sử dụng một hạn ngạch riêng cho mỗi người dùng, bất kể địa chỉ IP. Để đọc về cách kích hoạt quyền truy cập đã xác thực, hãy xem Sử dụng xác thực .
Bắt đầu một chi nhánh Repo
Đối với mỗi thay đổi mà bạn định thực hiện, hãy bắt đầu một nhánh mới trong kho lưu trữ Git có liên quan:
repo start NAME .
Bạn có thể bắt đầu một số nhánh độc lập cùng một lúc trong cùng một kho lưu trữ. Nhánh NAME
là cục bộ trong không gian làm việc của bạn và không được đưa vào Gerrit hoặc trong cây nguồn cuối cùng.
Thực hiện thay đổi của bạn
Sửa đổi các tệp nguồn và xác thực các thay đổi của bạn.
Cam kết các thay đổi đối với kho lưu trữ cục bộ của bạn bằng các lệnh sau:
git add -A
git commit -s
Thay đổi mô tả
- Dòng 1: Dòng tiêu đề
Cung cấp bản tóm tắt một dòng ( tối đa 50 ký tự)
Định dạng này được Git và Gerrit sử dụng cho các màn hình khác nhau. Đây là phần quan trọng nhất, dày đặc nhất trong thông điệp cam kết của bạn. Cân nhắc sử dụng các tiền tố để mô tả khu vực bạn đã thay đổi, tiếp theo là mô tả về thay đổi bạn đã thực hiện trong cam kết này, chẳng hạn như điều này có
ui
là tiền tố:ui: Removes deprecated widget
- Dòng 2: Trống
Luôn để trống dòng này.
- Dòng 3: Nội dung
Viết một mô tả dài hơn, bắt đầu từ dòng này.
Điều này phải được gói cứng ở tối đa 72 ký tự. Mô tả vấn đề mà thay đổi giải quyết và làm thế nào. Mặc dù đây là tùy chọn khi triển khai các tính năng mới, nhưng sẽ rất hữu ích cho những người khác sau này nếu họ tham khảo thay đổi này, đặc biệt là để gỡ lỗi.
Bao gồm ghi chú ngắn gọn về mọi giả định hoặc thông tin cơ bản có thể quan trọng khi một cộng tác viên khác làm việc trên tính năng này.
Một ID thay đổi duy nhất và tên và email của bạn, được cung cấp trong quá trình khởi động repo init
, sẽ tự động được thêm vào thông báo cam kết của bạn.
Đây là một thông báo cam kết mẫu:
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.Để đọc một blog về các mô tả cam kết tốt (có ví dụ), hãy xem Cách viết Thông điệp Cam kết Git của Chris Beams.
Đang tải lên Gerrit
Sau khi bạn cam kết thay đổi đối với lịch sử cá nhân của mình, hãy tải nó lên Gerrit bằng lệnh sau:
repo upload
Nếu bạn đã bắt đầu nhiều nhánh trong cùng một kho lưu trữ, bạn sẽ được nhắc chọn những nhánh để tải lên.
Sau khi tải lên thành công, Repo cung cấp cho bạn URL của một trang mới trên Gerrit . Nhấp vào liên kết mà Repo cung cấp cho bạn để xem bản vá của bạn trên máy chủ đánh giá, thêm nhận xét hoặc yêu cầu người đánh giá cụ thể cho bản vá của bạn.
Yêu cầu đánh giá
Sau khi bạn đã tải các thay đổi của mình lên Gerrit, bản vá phải được chủ sở hữu mã thích hợp xem xét và phê duyệt. Tìm chủ sở hữu mã trong tệp OWNERS
.
Để tìm chủ sở hữu mã thích hợp và thêm họ làm người đánh giá cho thay đổi của bạn, hãy làm theo các bước sau.
Chọn liên kết CHỦ SỞ HỮU GẤP NHẤT trong giao diện người dùng Gerrit để xem danh sách các chủ sở hữu mã cho các tệp trong bản vá của bạn.
Hình 1. Đề xuất liên kết chủ sở hữu trong Gerrit Thêm chủ sở hữu mã từ danh sách làm người đánh giá cho bản vá của bạn.
Để xác định trạng thái của các tệp trong bản vá của bạn, hãy kiểm tra các biểu tượng sau bên cạnh các tệp trong bản vá.
- (biểu tượng dấu kiểm): Được chủ sở hữu mã phê duyệt
- (biểu tượng chéo): Không được chủ sở hữu mã chấp thuận
- (biểu tượng đồng hồ): Đang chờ chủ sở hữu mã phê duyệt

Tải lên bản vá thay thế
Giả sử một người đánh giá đã xem xét bản vá của bạn và yêu cầu một sửa đổi nhỏ. Bạn có thể sửa đổi cam kết của mình trong Git, điều này dẫn đến một bản vá mới trên Gerrit có cùng ID thay đổi như bản gốc.
git add -A
git commit --amend
Khi bạn tải lên bản vá sửa đổi, nó sẽ thay thế bản gốc trên Gerrit và trong lịch sử Git cục bộ của bạn.
Giải quyết xung đột đồng bộ hóa
Nếu các bản vá khác được gửi tới cây nguồn xung đột với của bạn, hãy đặt lại bản vá của bạn trên HEAD
mới của kho lưu trữ nguồn. Để làm như vậy, hãy chạy lệnh sau:
repo sync
Lệnh repo sync
tìm nạp các bản cập nhật từ máy chủ nguồn, sau đó cố gắng tự động căn cứ lại HEAD
của bạn vào HEAD
từ xa mới.
Nếu rebase tự động không thành công, hãy thực hiện rebase thủ công.
repo rebase
Một công cụ khác để giải quyết xung đột rebase là git mergetool
. Khi bạn đã hợp nhất thành công các tệp xung đột, hãy chạy lệnh sau:
git rebase --continue
Sau khi hoàn tất quá trình rebase tự động hoặc thủ công, hãy chạy repo upload
để gửi bản vá phục hồi của bạn.
Sau khi gửi được phê duyệt
Sau khi một bản gửi hoàn thành qua quá trình xem xét và xác minh, Gerrit sẽ tự động kết hợp thay đổi vào kho lưu trữ công khai. Những người dùng khác có thể chạy repo sync
để kéo bản cập nhật vào các máy khách cục bộ tương ứng của họ.
Đối với các dự án thượng nguồn
Android sử dụng một số dự án mã nguồn mở khác, chẳng hạn như nhân Linux và WebKit, như được mô tả trong Quản lý phần mềm Android . Đối với hầu hết các dự án nằm trong external/
, hãy thực hiện các thay đổi ngược dòng, sau đó thông báo cho người bảo trì Android về bản phát hành ngược dòng mới có chứa các thay đổi của bạn.
Bạn cũng có thể tải lên các bản vá lỗi khiến bản phát hành ngược dòng mới được theo dõi. Lưu ý rằng đây có thể là những thay đổi khó thực hiện nếu dự án được sử dụng rộng rãi trong Android, giống như hầu hết các dự án lớn hơn được đề cập bên dưới, thường được nâng cấp sau mỗi bản phát hành.
Một trường hợp đặc biệt thú vị là Bionic. Phần lớn mã ở đó là từ BSD, vì vậy trừ khi thay đổi là mã mới đối với Bionic, vui lòng thực hiện sửa chữa ngược dòng, sau đó kéo toàn bộ tệp mới từ BSD thích hợp.
Nhân Android
Thích thực hiện tất cả các thay đổi ngược dòng. Để có hướng dẫn chung, hãy làm theo Nguyên tắc đóng góp cho nhân Android .
ICU
Thực hiện tất cả các thay đổi đối với dự án ICU tại thư mục external/icu
icu ( icu4c/
và icu4j/
) trên Trang chủ ICU-TC . Xem Gửi lỗi ICU và Yêu cầu tính năng để biết thêm.
CLDR
Hầu hết dữ liệu ngôn ngữ trong ICU đến từ dự án Unicode CLDR . Vui lòng gửi tất cả các yêu cầu ngược dòng bằng cách sử dụng Yêu cầu thay đổi CLDR và thêm nhãn 'Android'.
LLVM / Clang / Trình biên dịch-rt
Thực hiện tất cả các thay đổi đối với các dự án liên quan đến LLVM ( external/clang
, external/compiler-rt
, external/llvm
) trên trang Cơ sở hạ tầng trình biên dịch LLVM .
mksh
Thực hiện tất cả các thay đổi đối với dự án MirBSD Korn Shell tại external/mksh
bằng cách gửi email đến miros-mksh
trên miền mirbsd.org
(không cần đăng ký để gửi ở đó) hoặc tại Launchpad .
OpenSSL
Thực hiện tất cả các thay đổi đối với dự án OpenSSL tại external/openssl
trên trang OpenSSL .
V8
Gửi tất cả các thay đổi cho dự án V8 tại external/v8
trên trang sự cố V8 . Xem phần Đóng góp cho V8 để biết thêm chi tiết.
WebKit
Thực hiện tất cả các thay đổi đối với dự án WebKit tại external/webkit
trên trang WebKit . Bắt đầu quá trình bằng cách gửi lỗi WebKit . Trong lỗi, chỉ sử dụng Android
cho các trường Nền tảng và Hệ điều hành nếu lỗi dành riêng cho Android. Các lỗi có nhiều khả năng nhận được sự chú ý của người đánh giá hơn sau khi bản sửa lỗi được đề xuất được thêm vào và các bài kiểm tra được đưa vào. Xem Mã đóng góp cho WebKit để biết thêm chi tiết.
zlib
Thực hiện tất cả các thay đổi đối với dự án zlib tại external/zlib
trên trang chủ zlib .