2013-02-26 61 views
1

我剛剛克隆了一個倉庫,之前我從未使用過。它包含子模塊,所以我也爲什麼更新分支更新子模塊(沒有明確的拉)?

~/projects/myProject (master) $ git submodule init 
~/projects/myProject (master) $ git submodule update 

因爲我所需要的子模塊的新版本,我試圖通過更新:

~/projects/myProject (master) $ cd subs/mySubmodule 
~/projects/myProject/subs/mySubmodule ((no branch)) $ git checkout master 
~/projects/myProject/subs/mySubmodule (master) $ git pull 

,並得到

Already up-to-date. 

WTF

在調查了所有情況並重試整件事情之後,我意識到子模塊實際上是用分支開關更新的,並且通過這種拉動並不是必需的,響應(Already up-to-date.)是正確的。

那麼爲什麼呢?

回答

1

說交換機更新子模塊並不完全正確。當您運行git submodule update時,子模塊已更新。子模塊有點奇怪。作爲this page說:

... git submodule update從該項目獲取的所有數據,並檢查 出適當的在你的子項目會提交上市:

所以,如果你運行git submodule udpate,你已經有了即使您看到的版本不是最新版本,也可以從回購中進行所有更改。這是因爲每個分支都有與之相關的特定提交。您看到的代碼可能已舊,但子模塊已經具有所有最新數據。然後,當你git checkout master你切換到可用的最新版本,並git pull不會做任何事情。