2013-11-14 20 views
14

Tôi đang cố gắng sử dụng các mô đun con git để tổng hợp 10+ kho lưu trữ thành một cấu trúc để dễ dàng phát triển.Git submodule để theo dõi chi nhánh từ xa

Giả định sao chép mô-đun và thanh toán chi nhánh. Thay vào đó, mô-đun được kiểm tra ở chế độ đầu bị tách rời.

git clone [email protected]:org/global-repository.git 
git submodule update —init 
cd config-framework 
git status 

$git status 
#HEAD detached at b932ab5 
nothing to commit, working directory clean 

gitmodules file có vẻ là ổn

$cat .gitmodules 
[submodule "config-framework"] 
     path = config-framework 
     url = [email protected]:org/config-framework.git 
     branch = MY_BRANCH 

Chúng tôi muốn các chi nhánh MY_BRANCH để được kiểm tra ra theo mặc định, chứ không phải là người đứng đầu tách ra. Làm cách nào để đạt được điều đó?

+0

Đây là cách thức mô-đun con hoạt động. Dự án tổng thể tham chiếu đến một cam kết cụ thể, không phải chi nhánh. – twalberg

Trả lời

18

Mô-đun con là luôn là đã đăng ký trong detached HEAD mode.

Đó là do một mô-đun con sẽ kiểm tra SHA1 được lưu trữ trong special entry in the index of the parent repo.

Thêm vào đó, nếu bạn muốn có một submodule để làm theo các chi nhánh bạn đã đăng ký trong .gitmodules, bạn cần:

git submodule update --init --remote 

Các --remote sẽ làm cho một git fetch, cộng với một kiểm tra của các mới HEAD.
Than ôi, ngay cả việc thanh toán đó sẽ là cam kết, không phải của chi nhánh (vì bạn không có nhánh địa phương theo mặc định trong mô-đun con), vì vậy ... trở lại chế độ HEAD tách rời.
Xem thêm tại "Git submodules: Specify a branch/tag".

Bạn có thể thử (không kiểm tra) a:

git submodule foreach 'git checkout -b $(git config -f /path/to/parent/repo/.gitmodules --get submodule.$path.branch)' 

tôi tận dụng thực tế git submodule foreach có quyền truy cập vào '$path', tên của thư mục submodule tương đối so với superproject.


Có là một nỗ lực để xác định một chi nhánh cho một submodule để được tự động kiểm tra ra trong (commit 23d25e4 cho Git 2.0) .... nhưng nó đã đảo ngược (commit d851ffb, tháng 2d 2014)!
Có thể đến sớm, nhưng không phải trong quá trình triển khai hiện tại.

+0

Sẽ đánh giá cao, nếu bạn có thể trả lời câu hỏi liên quan của tôi ở đây: http://stackoverflow.com/q/25799319/2872891. Cảm ơn bạn! –

1

Nếu kế hoạch của bạn là đóng góp cho một mô-đun con, cách tiếp cận tốt nhất là kiểm tra nó riêng biệt như một repo git thông thường. Bạn có làm việc trong các nhánh với các điều khiển từ xa khác nhau không. Sau đó trỏ submodule của bạn vào điều khiển từ xa duy nhất mà bạn muốn sử dụng để kiểm tra.

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