2011-12-27 23 views
24

Khi tôi thêm một submodule Git đến một kho Git như thế này,Làm thế nào để làm cho mô-đun con với HEAD tách rời được gắn vào HEAD thực tế?

git submodule add ssh://server/proj1/ proj1 
git submodule init 
git submodule update 

các submodule thêm sẽ được ở ĐẦU tách chế độ. Tôi không biết điều đó là gì, nhưng tôi biết rằng mô-đun con sẽ được liên kết với bản sửa đổi cụ thể của kho lưu trữ đích.

Tôi không biết nó hoạt động như thế nào, dù sao nó trông giống như một nhánh proxy tồn tại ở đó. Tôi đã giải quyết vấn đề này bằng cách chuyển sang nhánh chính.

cd proj1 
git checkout master 

Điều này sẽ chuyển nhánh nhánh hiện tại thực tế HEAD, nhưng điều này không cập nhật liên kết. Vì vậy, nếu bạn sao chép toàn bộ kho lưu trữ một lần nữa, nó vẫn sẽ được liên kết với bản sửa đổi cũ.

Nếu tôi muốn liên kết với bản sửa đổi gần đây nhất (HEAD) luôn, tôi nên làm gì?

+0

Lưu ý rằng submodule bây giờ có thể theo dõi một chi nhánh. xem câu trả lời đã chỉnh sửa của tôi. – VonC

+0

Tôi tìm thấy http://stackoverflow.com/a/20797186/1808261 thông tin này sau khi đến bài đăng này. – dtmland

+0

Bản sao có thể có của [Làm cách nào tôi có thể điều chỉnh HEAD tách rời với chủ/gốc?] (Http://stackoverflow.com/questions/5772192/how-can-i-reconcile-detached-head-with-master-origin) –

Trả lời

32

Cập nhật tháng 3 năm 2013

Git 1.8.2 thêm khả năng theo dõi nhánh.

"git submodule" bắt đầu học một chế độ mới để tích hợp với phần đầu của chi nhánh từ xa (như trái ngược với việc tích hợp với các cam kết ghi trong gitlink của superproject).

# add submodule to track master branch 
git submodule add -b master [URL to Git repo]; 

# update your submodule 
git submodule update --remote 

cũng Xem Vogella's tutorial on submodules.


câu trả lời gốc (December 2011)

thêm submodule sẽ ở chế độ ĐẦU tách

Vâng, một submodule là về tham khảo phạm cụ thể, và không phải là một chi nhánh.
Vì vậy:

  • Nếu bạn kiểm một cam kết SHA1 (hoặc thẻ), bạn đang ở trong một chế độ ĐẦU tách ra.
  • Nếu bạn thanh toán chi nhánh (giống như bạn đã làm với chi nhánh master của mô-đun con), bạn có thể tạo các cam kết khác trên nhánh đó (nhưng bạn sẽ phải quay lại kho lưu trữ gốc để cam kết cha mẹ cũng nói , để bạn cần ghi lại mô-đun con mới mà bạn đã tạo)

Xem "True nature of submodules" để biết thêm.

Nếu bạn luôn muốn cam kết mới nhất của một repo khác, cách đơn giản nhất là hợp nhất chúng lại với nhau (ví dụ như sáp nhập subtree).
Xem "Merge 2 same repository GIT" để biết chi tiết và tham chiếu.

+0

Lưu ý git submodules rất khác với svn externals chẳng hạn. Xem http://stackoverflow.com/questions/3131912/why-are-git-submodules-incompatible-with-svn-externals/3132221#3132221 – VonC

+1

Lưu ý chỉ sau này. 'Subtree merge' không dành cho tôi, và tôi nghĩ' submodule' sẽ là câu trả lời nếu nó hỗ trợ theo dõi tốt. – Eonil

+0

@Eonil nhưng nó hỗ trợ theo dõi rất tốt, nếu bạn muốn nó quá. đơn giản, chức năng chính của nó là ghi lại một phiên bản cố định. – VonC

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