2012-04-12 16 views
8

Tôi có thể sao chép mã nguồn Android bằng cách sử dụng công cụ "repo". Tuy nhiên, những gì tôi muốn làm là sao chép mã nguồn theo một cách tối thiểu hơn là có dấu chân 11GB. Dường như tải xuống mọi thứ có liên quan đến mọi thiết bị Android và mọi bản phát hành trước. Tôi đã cố gắng nghĩ rằng tôi có thể làm giảm điều này bằng cách kiểm tra một chi nhánh cụ thể như sau:cách sử dụng "repo" để sao chép nguồn Android tối thiểu?

repo init -u https://android.googlesource.com/platform/manifest -b android-4.0.1_r1 

Tuy nhiên, điều cuối cùng xảy ra là tôi vẫn nhận được mọi thứ liên quan, chỉ ở một ảnh chụp cụ thể (dễ hiểu). Nhưng có cách nào để hạn chế số tiền được sao chép không?

Trả lời

4

Cây nguồn Android được tạo thành từ nhiều kho lưu trữ git riêng biệt, tất cả đều được quản lý bởi repo. Bạn thực sự không thể giảm lượng dữ liệu được tải xuống cho một kho lưu trữ git đã cho.

Tuy nhiên, bạn chỉ có thể tải xuống một tập con của repo git có sẵn, sử dụng repo sync <project>. I E. nếu bạn chỉ muốn gói khung/cơ sở, bạn có thể làm repo sync frameworks/base, sau khi thực hiện repo init ban đầu.

Nếu bạn thực sự muốn xây dựng nguồn mặc dù, bạn có thể muốn có đầy đủ.

Bạn có thể lưu một hoặc hai biểu đồ bằng cách xóa các kho lưu trữ thiết bị mà bạn không cần. Bạn có thể thực hiện việc này bằng cách chỉnh sửa < nguồn > /.repo/manifest.xml và xóa các kho lưu trữ cho các thiết bị bạn không muốn.

+1

Điều này mang lại lỗi, '$ repo init -u https: // android.googlesource.com/platform/manifest', sau đó' $ repo sync platform/tools/base' và tôi nhận được 'lỗi: nhóm dự án phải được bật cho nền tảng/công cụ/cơ sở dự án. Bất kỳ ý tưởng? – nmr

3

Có một số việc bạn có thể làm. Đầu tiên, "đồng bộ hóa repo" với đối số -c sẽ giới hạn hộp cát được kiểm xuất thành chỉ nhánh "hiện tại". Đồng bộ hóa repo sẽ không tải xuống tài liệu cho các nhánh khác.

Bạn cũng có thể chỉnh sửa tệp kê khai .repo/manifests/default.xml. Những gì tôi làm là tạo một bản sao lưu của nó như "default.bak" và sau đó loại bỏ các dòng từ tệp default.xml mà tôi biết tôi không cần. Bởi vì tôi không xây dựng trên Macintosh, tôi biết tôi không cần bất kỳ công cụ "darwin" nào, vì vậy tôi xóa mọi dòng có chứa "darwin". Sau đó, "repo sync" không tải xuống bất kỳ dự án darwin nào hoặc cài đặt mã nguồn trong hộp cát.

Nếu bạn đã đồng bộ hóa một hộp cát và bạn muốn cắt kích thước, bạn có thể loại bỏ các dự án như trên, sau đó thực hiện "repo sync -c -l" và repo sync sẽ chỉ xóa các thư mục mà bạn vừa đã xóa. Cờ -l chỉ thực hiện phần cục bộ của đồng bộ, có nghĩa là nó chỉ đồng bộ các dự án git cục bộ với cây nguồn của bạn. Mạng không được sử dụng. Xem cờ "-n" cho nửa còn lại của đồng bộ thông thường, mạng này sẽ đồng bộ hóa để cập nhật các dự án git cục bộ với kho lưu trữ ngược dòng.

Để cũng loại bỏ các cửa hàng đối tượng git sự ủng hộ cho các dự án không mong muốn (mà mất rất nhiều phòng) Tôi sử dụng này:

for project in `diff ~/android/.repo/manifests/default.xml ~/android/.repo/manifests/default.bak | awk '{print $3}' | grep path | cut -f2 -d\"`; do rm -rf ~/android/.repo/projects/$project.git ; rm -rf ~/android/.repo/project-objects/$project.git ; done 

này tìm tất cả các dự án có trong bản sao lưu của bạn kê khai nhưng có đã bị xóa khỏi tệp kê khai hoạt động của bạn và xóa các dự án git cũng như tất cả dữ liệu sao lưu cho chúng. Điều này phục hồi rất nhiều không gian.

Nếu bạn xóa quá nhiều, chỉ cần khôi phục dòng dự án từ tệp kê khai dự phòng của bạn và thêm lại dòng đó vào tệp kê khai hoạt động của bạn. Sau đó, một đồng bộ repo sẽ nhận được các dự án git của bạn và sandbox của bạn thẳng một lần nữa. Bạn có thể kiểm tra bản dựng để xem liệu bạn đã loại bỏ nhiều bằng cách thực hiện "mma -B -n" trong thư mục dự án của bạn chưa. Điều này sẽ cố gắng làm một sự phụ thuộc hoàn toàn vào mục tiêu của bạn, buộc tất cả các mục tiêu để xây dựng ngay cả khi họ không cần nó, và nó sẽ làm điều đó như là một chạy khô. Nếu việc xây dựng không thành công, bạn đã xóa một thứ mà dự án của bạn cần.

Bạn cũng có thể thiết lập hộp cát gương bản địa và tạo các hộp cát nhỏ, hoạt động, tham chiếu từ gương của mình. Các sandbox đang hoạt động không chứa các cửa hàng đối tượng git, nhưng tham chiếu đến các ô trung tâm trong gương. Sử dụng "repo init -u ... --mirror" để thiết lập gương, và "repo init --reference = ~/android-mirror -u ..." để tham chiếu đến mirror. Cờ -u sau này cho phép một kho lưu trữ ngược dòng thực sự được sử dụng làm cơ quan, trong khi tham chiếu nhân bản được sử dụng như một bộ đệm cục bộ. Gương địa phương cũng tránh hạn ngạch tải xuống mà dự án AOSP thực thi và chúng nhanh hơn để đồng bộ hóa.

Các vấn đề liên quan