能否强制更新git子模块?

8
我们有一个依赖其他git存储库中代码的git存储库。 我们使用了通常的子模块方式来表达这种关系,并确保支持代码位于用户目录结构的标准位置。更新支持代码也很简单:
- 对子模块进行更改 - 提交更改 - 推送更改 - 进入主存储库 - 提交对子模块的更改 - 推送更改
问题出现在另一侧。 在此类更改之后,为了使其他开发人员获得完整、一致的代码集,他们需要执行三个命令:
- git pull(更新主存储库) - git submodule init(以防添加了任何新的子模块) - git submodule update(更新子模块)
训练开发人员执行所有这些操作已经被证明是困难的,特别是因为在我们的所有其他存储库中,不包含子模块,只需执行pull就足够了。结果是开发人员有时会使用过时版本的子模块代码,导致产生耗时的问题。 除了编写一个执行所有三个命令的shell脚本并坚持“使用它!”,还有没有其他自动化的方法?
2个回答

3

您可以尝试向同事提出以下建议:

git config --global fetch.recurseSubmodules on-demand

git config man page

fetch.recurseSubmodules

此选项可以设置为布尔值或按需设置。

  • 将其设置为布尔值会更改fetch和pull的行为,当设置为true时无条件递归到子模块中,当设置为false时则不进行递归。
  • 当设置为按需(默认值)时,只有在超级项目检索更新子模块引用的提交时,fetch和pull才会递归到已填充的子模块中。

另一种选择是要求他们执行一个更复杂的命令:

git pull --recurse-submodules=on-demand

上面提到的git config设置的优点是允许开发人员进行简单的git pull操作。

0

我能想到两个解决方案。

编写脚本:

#!/bin/sh

git pull
git submodule init
git submodule update

添加一个 Git 别名:

#in ~/.gitconfig
[alias] update-all = !git pull && git submodule init && git submodule update

1
@VonC的回答更加优秀。我想这就是你在寻找的。^_^ - Chris Knadler

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接