Git子模块及其与父级的关系

时间:2013-06-21 16:24:53

标签: git

如果父存储库有许多子模块。父存储库是否存储子模块的当前提交?

当我在父存储库的全新安装中签出父存储库时,它似乎没有部署最新版本的子模块。

该框启动的克隆命令是。

git clone --recursive repo_url folder

2 个答案:

答案 0 :(得分:1)

父存储库存储每个子模块的提交哈希值,而不是子模块本身的代码。当您以递归方式克隆父级时,它将克隆子模块直到该提交。这实际上是一件好事,因为你不希望git拉出一个较新版本的子模块,因为你的父模块可能与它不兼容。

要更新子模块,您必须明确地执行此操作:

cd submoduledir/
git pull origin master
cd ..
git status

然后提交更新的子模块:

git add submoduledir
git commit -m "Update submodule"

如果要从已更新子模块的主服务器更新本地副本,请执行以下操作:

git pull origin master
git submodule update --recursive

答案 1 :(得分:0)

它不存储它,而是只知道哪个提交子模块的当前位置和位置。检查this

要获得最新的子模块,请使用:

git submodule foreach --recursive 'echo `git checkout master`'
git submodule foreach --recursive 'echo `git pull`'

假设您希望所有子模块都位于master分支。

保留状态提交它。