当子模块或子模块的上游源或源的内容发生变化时自动更新 Git 存储库的工具?

Tooling to Automatically Update Git Repositories When Their Submodule's or Submodules' Upstream Source's or Sources' Contents Change?

存在哪些工具旨在使更新 Git 存储库及其子模块元数据变得容易(或至少 更容易)该父存储库中包含的任何子模块都在上游发生变化吗?我看过建议使用 Git 挂钩或持续集成和部署系统以这种方式管理此类事情的建议,但似乎没有人想出并充分解释了一个可行的综合解决方案。

首先取决于主父存储库如何引用其子模块。
如果它有 submodules tracking a branch,那么一个简单的命令就足以用新的子模块内容更新父仓库:

git submodule update --recursive --remote

然后您需要做的就是定期执行(cron 作业、Jenkins 作业……),您的主存储库将始终是最新的。


could CI/CD see that a submodule the repository with which it's associated depends on has changed and run this for you if it can?

一份工作可以:

  • get the SHA1 of the gitlink associated to a submodule

    git rev-parse released-1.2.3^{commit}:foo
    
  • 执行所有子模块的更新

    git submodule update --recursive --remote
    
  • 比较子模块的SHA1与原来的SHA1:如果有任何变化,子模块不再引用相同的SHA1并且有一些变化。