Làm cách nào để kiểm tra phiên bản cụ thể của một mô-đun con bằng cách sử dụng 'git submodule'?


Câu trả lời:


167

Kho lưu trữ mô-đun con luôn ở trạng thái HEAD tách rời trỏ đến một cam kết cụ thể. Thay đổi cam kết đó chỉ đơn giản là kiểm tra một thẻ khác hoặc cam kết sau đó thêm thay đổi vào kho lưu trữ mẹ.

$ cd submodule
$ git checkout v2.0
Previous HEAD position was 5c1277e... bumped version to 2.0.5
HEAD is now at f0a0036... version 2.0

git-status trên kho lưu trữ mẹ bây giờ sẽ báo cáo một cây bẩn:

# On branch dev [...]
#
#   modified:   submodule (new commits)

Thêm thư mục submodule và cam kết lưu trữ con trỏ mới.


14
Sau khi tôi đã cam kết repo chính với một nhánh / phiên bản cụ thể của mô-đun con, những người khác có thể kiểm tra phiên bản tương tự của mô-đun con trong tương lai không? Hoặc, họ phải chỉ định lại bằng tay?
QZHua

@QZHua: Tôi đã tự mình thử nghiệm điều này và có vẻ như ID cam kết của mô-đun con được giữ nguyên khi cha mẹ được nhân bản.
Psychonaut

37

Bước 1: Thêm mô-đun con

   git submodule add git://some_repository.git some_repository

Bước 2: Sửa mô-đun con thành một cam kết cụ thể

Theo mặc định, mô-đun con mới sẽ theo dõi HEAD của nhánh chính, nhưng nó sẽ KHÔNG được cập nhật khi bạn cập nhật kho lưu trữ chính của mình. Để thay đổi mô-đun con để theo dõi một cam kết cụ thể hoặc một nhánh khác, hãy thay đổi thư mục thành thư mục mô-đun con và chuyển các nhánh giống như bạn làm trong một kho lưu trữ thông thường.

   git checkout -b some_branch origin/some_branch

Bây giờ submodule được cố định trên nhánh phát triển thay vì HEAD của master.

Từ hai người đang tranh luận - Buộc các mô-đun con Git thành một Cam kết hoặc Chi nhánh Cụ thể .


20
Nó dễ sử dụng hơngit submodule add -b some_branch git://some_repository.git some_repository
Caumons

15
Tại thời điểm này, có vẻ như nó không có git submodule add -bthể nhận được một thẻ hoặc một sha1hash. Nó chỉ có thể mất một nhánh.
CMCDragonkai

Có vấn đề gì cho việc này trong trình theo dõi sự cố Git không? Ai đó vui lòng đăng một URL để chúng tôi có thể theo dõi nó? Cảm ơn.
colan

@colan hướng dẫn báo cáo lỗi có tại git-scm.com/community . Nhưng -bcác nhánh hỗ trợ chứ không phải thẻ hoặc phạm vi cam kết là một tính năng không phải là lỗi (thực tế -blà viết tắt của --branch).
henry

1
Thở dài. Sau nhiều năm, họ vẫn không có công cụ theo dõi vấn đề công khai.
colan
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.