2012-09-22 127 views
1

我正在使用GIT存儲庫(在此處稱爲A)。它包含一個子模塊(在此稱爲B)。當Git獲取舊子模塊

git clone --recursive <repository url for A> 

AB克隆的A新副本克隆,但B版本已過期!不管我如何

git submodule update 

更新它時,我只克隆B,它是由最新的。

出了什麼問題?我的git版本是git version 1.7.7.5 (Apple Git-26),我的存儲庫位於bitbucket

回答

3

雖然裏面的A,cd到迪爾在哪裏B是。

cd path/to/B/inside/A 

現在你可以checkout任何承諾,你想在A.

git checkout <branch or commit> 

(您可能需要fetch/pull的最新變化這一checkout之前。)

現在去回到A的根目錄,並提交更改。

cd - 
git add path/to/B/inside/A 
git commit -m "Update submodule B pointer." 

從現在起,git clonegit submodule updatecheckout犯下。

請注意,B與A無關,因此B可以具有任何分支狀態,但是作爲A的子模塊,它將指向A需要的提交。這允許兩個回購的獨立發展。

+0

如何讓B保持在最新版本? –

+0

你的意思是「我如何保留A內最新版本的B」?你不能自動獲得afaik。無論何時你需要B指向一個新的提交,你都必須手動完成。也就是說,更新目錄中的提交,然後'添加'和'提交'在A中更改。 – Sailesh

+0

考慮一個B是您在項目A中使用的第三方庫的情況。它的所有工作都很好,但有人在B中改變了它與你的項目整合的方式。如果您的項目A中的內容自動更改,那麼您的A將會突然中斷,而您沒有做任何事情。然後你最終會在B中尋找一個工作提交,並且會盡力保持這個提交。爲了防止這一切,如果您將任何子模塊添加到A,那麼您將決定您想在A中使用的代碼的提交(版本)。並且如果您想更改,則必須明確地執行此操作。 – Sailesh