我们使用git子模块来管理一些依赖于我们开发的许多其他库的大型项目。每个库都是一个单独的repo,作为子模块引入到依赖项目中。在开发过程中,我们经常想要获取每个依赖子模块的最新版本。
如何获取所有git子模块的最新更改?
我们使用git子模块来管理一些依赖于我们开发的许多其他库的大型项目。每个库都是一个单独的repo,作为子模块引入到依赖项目中。在开发过程中,我们经常想要获取每个依赖子模块的最新版本。
如何获取所有git子模块的最新更改?
当前回答
下面是从所有git存储库中提取的命令行,无论它们是否是子模块:
ROOT=$(git rev-parse --show-toplevel 2> /dev/null)
find "$ROOT" -name .git -type d -execdir git pull -v ';'
如果您在顶级git存储库中运行它,可以将“$ROOT”替换为。。
其他回答
以下内容在Windows上适用。
git submodule init
git submodule update
从回购协议的顶层:
git submodule foreach git checkout develop
git submodule foreach git pull
这将切换所有分支机构以开发和拉动最新的
根据从远程获取每个子模块的“最新”代码的现有答案,澄清一些问题。
如果“最新”是指签入的子模块指针,则无论如何使用:
git submodule update --recursive
- or -
git pull --recurse-submodules --jobs=X
如果“最新”是指main的最新版本,那么类似这样的内容可以起作用:
git submodule foreach "git checkout main && git pull"
不幸的是,这意味着没有“--jobs”选项,因此我们无法并行运行它。我所看到的最接近并行运行的方法是使用pfs-python代码。
我经常使用这个命令,到目前为止,它仍然有效。
git pull
git submodule foreach --recursive git checkout master
git submodule foreach --recursive git pull
希望能快点。
对我来说,git2.24.03,更新到.gitmodules中定义的远程分支的最新提交。
git子模块更新--递归--init
git子模块更新--递归--远程
git版本2.24.3(Apple git-128)
请注意:有人说过git pull-递归子模块与git子模块update-递归-远程相同。但根据我的测试,gitpull-recurse子模块可能不会更新为.gitmodules中定义的远程分支的最新提交。