2013-10-23 11 views
6

Tôi đang cố gắng tạo một nhánh mới của AOSP (trên máy phát triển của tôi) và đẩy nó vào một máy nhân bản địa phương (trên một máy chủ trên cùng một mạng LAN). Tôi không thể tìm thấy tài liệu về công cụ "repo" giải thích cách thực hiện việc này.Đẩy chi nhánh repo vào gương AOSP cục bộ

tôi đã tạo ra một tấm gương của nguồn AOSP trên máy chủ của tôi sử dụng:

$ mkdir -p ~/aosp/mirror 
$ cd ~/aosp/mirror 
$ repo init -u https://android.googlesource.com/mirror/manifest --mirror 

Sau đó, tôi đồng bộ sau trên một máy tính khác nhau:

$ repo init -u <USERNAME>@<IP_OF_SERVER>:/home/<USERNAME>/aosp/mirror/platform/manifest.git -b android-4.2.2_1 
$ repo sync 

Cho đến nay rất tốt. Tôi đang sử dụng "-b android-4.2.2_1" vì tôi cần sự phát triển của mình để sử dụng phiên bản JellyBean này làm đường cơ sở.

Sau đó, tôi tạo ra một chi nhánh mới sử dụng "repo bắt đầu":

$ repo start my-branch-name --all 

Tuy nhiên tốt. Vấn đề là, tôi không thể tìm ra cách "đẩy" nhánh này đến máy chủ từ xa.

Khi tôi làm repo info tôi thấy:

Manifest branch: refs/tags/android-4.2.2_r1 
Manifest merge branch: android-4.2.2_r1 
Manifest groups: all,-notdefault 
---------------------------- 
Project: platform/abi/cpp 
Mount path: /home/<username>/<project_name>/android/abi/cpp 
Current revision: refs/tags/android-4.2.2_r1 
Local Branches: 1 [my-branch-name] 
--------------------------- 
.... 

Khi tôi cố gắng repo upload tôi nhận được:

no branches ready for upload 

sau đó tôi đã cố gắng repo forall -c "git push aosp my-branch-name"không đẩy các ngành địa phương để mỗi kho từ xa, nhưng có vẻ như đây không phải là cách thích hợp để làm điều đó. Đặc biệt, nếu tôi thử tạo một ứng dụng khách mới và thử đồng bộ hóa với nhánh, nó sẽ không hoạt động.

$ repo init -u <USERNAME>@<IP_OF_SERVER>:/home/<USERNAME>/aosp/mirror/platform/manifest.git -b my-branch-name 
error: revision my-branch-name in manifests not found 

Cách thích hợp để tạo "Chi nhánh đơn giản" là gì?

Trả lời

9

Lệnh repo start tạo chi nhánh địa phương dựa trên nhánh thượng nguồn hiện tại. Chạy repo upload sẽ tải lên bất kỳ cam kết cục bộ nào trên chi nhánh hiện đã được kiểm tra để xem xét chi nhánh ngược dòng do máy chủ Gerrit lưu trữ được liệt kê trong tệp kê khai. Nếu loại push bạn muốn làm không khớp với trường hợp sử dụng này, bạn sẽ phải sử dụng các lệnh Git cơ bản để đẩy. Bạn vẫn có thể sử dụng repo start mặc dù (nhưng bạn không phải).

Để tạo chi nhánh bản kê, repo startrepo upload không hữu ích. Không giống như các gits khác mà Repo quản lý, bạn nên thực hiện tất cả thay đổi đối với git tệp kê khai trên chi nhánh default mà Repo sẽ kiểm tra cho bạn. Sau đó, sử dụng lệnh Git đơn giản để đẩy các thay đổi của bạn.

Ví dụ sau cho thấy cách tạo chi nhánh bản kê mới có tên là mybranch, giống với luồng ngược dòng hiện tại.

cd .repo/manifests 
git push origin default:refs/heads/mybranch 

Bây giờ, điều này tự nó không phải là rất hữu ích vì các nội dung của biểu hiện của bạn là giống hệt nhau đến chi nhánh thượng nguồn - chúng ta vừa nhân bản mà chi nhánh của manifest như vậy trong khi bạn có thể chạy

repo init -u ssh://git.example.com/platform/manifest -b mybranch 

kết quả sẽ giống hệt với những gì bạn bắt đầu với:

repo init -u ssh://git.example.com/platform/manifest -b android-4.2.2_1 

Đối với gương của bạn để có ích bạn cũng phải chi mỗi git được liệt kê trong tệp kê khai để bạn nhận được một chi nhánh trên máy chủ của mình, nơi bạn có thể thực hiện thay đổi.

Về mặt lý thuyết, bạn có thể thực hiện các thay đổi cho cùng các chi nhánh mà bạn đã tải xuống từ thượng nguồn, nhưng điều đó sẽ tạo ra một mớ hỗn độn khi bạn cố gắng đồng bộ hóa từ phía trên vào lần tiếp theo. Đừng làm thế.

Để tạo các chi nhánh trên máy chủ bạn có thể làm theo cùng một khuôn mẫu như đối với các biểu hiện:

cd build 
git push ssh://git.example.com/platform/build HEAD:refs/heads/mybranch 

Lưu ý việc sử dụng các HEAD, tên mang tính biểu tượng của hiện kiểm tra ra cam kết. Việc làm này cho mỗi và mọi git là tẻ nhạt, vì vậy sử dụng repo forall lệnh:

repo forall -c 'git push aosp HEAD:refs/heads/mybranch' 

Lưu ý rằng tên từ xa khác với git manifest (IIRC).

Xem repo help forall cho một danh sách các biến môi trường có sẵn cho các lệnh chạy bởi repo forall (REPO_PROJECT, $REPO_LREV, và $REPO_RREV có lẽ là những người hữu ích nhất).

Thật dễ dàng để vít lên với repo forall, vì vậy làm cho nó một thói quen tốt để thêm vào trước lệnh của bạn với echo đầu tiên có các lệnh mà sẽ được chạy vang vọng đến thiết bị đầu cuối của bạn. Nếu bạn hài lòng với kết quả, hãy xóa echo để chạy các lệnh thực.

Bây giờ, bạn sẽ có chi nhánh mybranch trong tất cả các vị trí của mình, bao gồm tệp kê khai. Phần còn lại là thay đổi tệp kê khai sao cho

repo init -u ssh://git.example.com/platform/manifest -b mybranch 

thực sự sẽ kiểm tra mybranch trong tất cả các gits.

cd .repo/manifests 
vi default.xml 
[ Change the default revision from refs/tags/android-4.2.2_1 
    or whatever it says to 'mybranch'. ] 
git commit -a -m 'Changed default revision to mybranch.' 
git push origin default:refs/heads/mybranch 

Lưu ý rằng tất cả các gits không nhất thiết phải sử dụng sửa đổi mặc định (bạn vừa thay đổi thành mybranch). Đó có thể là trường hợp cho chi nhánh bản kê android-4.2.2_1, nhưng trong một số trường hợp khác, một số gits sẽ không sử dụng bản sửa đổi mặc định mà thay vào đó sẽ ghi đè nó bằng thuộc tính sửa đổi của riêng chúng. Điều đó hoàn toàn ổn, nhưng nó sẽ yêu cầu bạn thực hiện các thay đổi tệp kê khai bổ sung.

+0

Điều đó cực kỳ hữu ích; cảm ơn. –

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