我们使用git子模块来管理一些依赖于我们开发的许多其他库的大型项目。每个库都是一个单独的repo,作为子模块引入到依赖项目中。在开发过程中,我们经常想要获取每个依赖子模块的最新版本。
如何获取所有git子模块的最新更改?
我们使用git子模块来管理一些依赖于我们开发的许多其他库的大型项目。每个库都是一个单独的repo,作为子模块引入到依赖项目中。在开发过程中,我们经常想要获取每个依赖子模块的最新版本。
如何获取所有git子模块的最新更改?
当前回答
对我来说,git2.24.03,更新到.gitmodules中定义的远程分支的最新提交。
git子模块更新--递归--init
git子模块更新--递归--远程
git版本2.24.3(Apple git-128)
请注意:有人说过git pull-递归子模块与git子模块update-递归-远程相同。但根据我的测试,gitpull-recurse子模块可能不会更新为.gitmodules中定义的远程分支的最新提交。
其他回答
正如antitoxic的回答所指出的,一个简单的git子模块foreach——递归git pull就足够了。
弗朗西斯·培根(Francis Bacon)的回答指出,git pull-递归子模块可能不同。
您可以使用详细选项进行测试并查看发生了什么:
git pull -v --recurse-submodules
但为此,您需要Git 2.40(2023年第1季度)。
“git pull-v--recurse submodule”(man)试图将-v传递给底层git submodule update(man),后者不理解请求并弹出:这已经用git 2.40(2023年第1季度)纠正。
参见Sven Strickroth(csware)提交的6f65f84(2022年12月10日)。(由Junio C Hamano--gitster--在提交b3b9e5c中合并,2022年12月28日)
子模块:接受更新命令的-v签字人:Sven Strickroth
由于a56771a(“builtin/pull:尊重子模块中的冗余设置”,2018-01-25,Git v2.17.0-rc0--批次#3中列出的merge),“Git pull-v--递归子模块”(man)将-v传播到子模块命令,但因为后者命令不理解该选项,所以它会退出。教“git子模块更新”(man)接受修复选项。
不再“barfing”(即显示用法'gitsubmodule foreach[-quiet][--recursive][--]<command>'),因为-v是gitsubmodule的未知选项。
git pull --recurse-submodules --jobs=10
git在1.8.5中首次学习的特性。
在修复错误之前,第一次需要运行
git子模块更新--init--递归
我不知道这是从哪个版本的git开始工作的,但这就是您正在搜索的:
git submodule update --recursive
我也使用git pull来更新根存储库:
git pull && git submodule update --recursive
第一次
克隆和初始化子模块
git clone git@github.com:speedovation/kiwi-resources.git resources
git submodule init
Rest
在开发过程中,只需拉动并更新子模块
git pull --recurse-submodules && git submodule update --recursive
将Git子模块更新为最新的提交源代码
git submodule foreach git pull origin master
首选方式如下
git submodule update --remote --merge
注意:最后两个命令具有相同的行为
我想你必须写一个剧本才能做到这一点。老实说,我可能会安装python,这样您就可以使用os.walk来cd到每个目录并发出相应的命令。使用python或其他脚本语言(而不是批处理),可以轻松添加/删除子项目,而无需修改脚本。