2012-09-22 93 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