递归阶段所有 git-子模块参考更新

Recursively stage all git-submodule reference updates

我正在努力让 Jenkins 更好地使用 git 子模块。当前的过程是拉取父仓库和子模块,进行构建,修改版本,进行一系列更改,标记仓库,提交并推送。

我正在添加一个选项来更新子模块引用,这似乎也工作正常(在将跟踪分支信息添加到 .gitmodules 文件之后)。但是,我在自动(或可能递归地)将所有跟踪分支引用更新暂存到提交中时运气不佳。

因此,为了进行引用更改,我需要执行 git add /path/to/sub。这可能会成为一个问题 if/when 跟踪额外的子模块,尤其是当我试图将 stage/commit/tag 操作作为 Jenkins 全局库函数时。

需要说明的是,我并不是要提交在子模块内所做的更改,而是要提交对父存储库对子模块 sha[的引用的更改 =28=].

我不确定这样的命令是否已经存在,但我没能找到它。我正在设想一些类似 git add --submodule-paths 的东西。我觉得这可以通过使用 git submodule foreach 遍历子模块然后做一些事情来完成,但是几个小时后我什么也想不出来。

有什么好的方法吗?!

我想通了。这是我最后做的,以防其他人感兴趣:

git submodule foreach "git tag <some_version>"
git submodule foreach "cd $toplevel; git commit $path -m '<some_version> - Updating submodule reference'"
git submodule foreach "git push --tags"

$toplevelforeach 中为 git 预定义,并且是父工作区根目录的绝对路径。

$pathforeach 中为 git 预定义,是从父仓库到子模块根目录的相对路径。