我有一个包含各种嵌套子模块的存储库。提交和推送工作非常顺利,并且GitHub上的更改可以按预期显示。
在测试/生产环境中,正在使用以下命令部署此项目的新版本:
git pull --recurse-submodules
git submodule update --init --recursive
但这仅更新根项目,没有子模块更新为与GitHub上的HEAD相关联的提交。到目前为止,我发现更新整个项目的唯一方法是在每个子模块文件夹中运行git pull
。
我理解git submodule update
是大多数地方引用的方法,但在这种情况下它并没有真正产生任何结果。可能是什么原因?
答案 0 :(得分:14)
您需要确保您的子模块在分支之后,或者只能在特定的SHA1(不是最新的分支,而是special entry of the index of your parent repo)
检出它们参见" Git submodules: Specify a branch/tag"为了使你的子模块遵循一个分支。
然后git submodule update --init --recursive --remote
足以检查该分支的最新信息。
这个(git submodule update -remote
)需要git 1.8.2+ 2013年3月。OP Luís de Sousa has a git 1.7.9.5(2012年3月)并不提供此功能。
答案 1 :(得分:-1)
您有一个特定版本已提交到您的存储库。对于git,子模块是"文件"包含您提供的版本的sha1-hash。 git submodule update --init --recursive
确保您的子模块完全可用于该版本。
例如:
git init
并拥有空仓库git submodule add
添加子模块,该子模块将记录您在自己的存储库中添加的存储库的当前主控sha1-hash git pull
,您将获得新的提交,并在您自己的存储库中进行未提交的更改(子模块主服务器的新sha1-hash)git submodule update
现在将强制执行新版本因此,如果您自己的存储库的其他贡献者更新了他的结帐并执行git submodule update
,他将获得您固定的版本。因此,一般情况下,只有在未检出子模块或者有人更改了存储库中的关联哈希时,子模块更新才会起作用。