8

我们有一个 git 存储库,它依赖于其他 git 存储库中的代码。我们通常使用子模块来表达这种关系,并确保支持代码位于用户目录结构中的标准位置。更新支持代码很简单:

  • 对子模块进行更改
  • 提交它
  • 推它
  • cd 进入主存储库
  • 提交对子模块的更改
  • 推它

问题出现在另一边。在这种改变之后,为了让其他开发人员获得完整、一致的代码集,他们需要执行三个命令:

  • git pull(更新主存储库)
  • git submodule init(如果添加了任何新的子模块)
  • git submodule update(更新子模块)

事实证明,培训开发人员完成所有这些工作很困难,特别是因为在我们所有其他不包含子模块的存储库中,拉取就足够了。结果是开发人员有时会使用使用过时版本的子模块的代码,从而导致虚假问题,这些问题可能很耗时。除了编写一个执行所有三个命令并坚持“使用这个!”的shell脚本之外,还有什么方法可以使这更自动化?

4

2 回答 2

3

您可以尝试要求您的同事:

git config --global fetch.recurseSubmodules on-demand

git config 手册页

fetch.recurseSubmodules

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

  • 将其设置为布尔值会更改 fetch 和 pull 的行为,以便在设置为 true 时无条件地递归到子模块中,或者在设置为 false 时根本不递归。
  • 当设置为 on-demand(默认值)时,fetch 和 pull 只会在其超级项目检索到更新子模块引用的提交时递归到已填充的子模块中。

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

git pull --recurse-submodules=on-demand

上面提到的git config设置的好处是可以让开发者做一个简单的git pull.

于 2013-08-06T21:35:23.577 回答
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
于 2013-08-06T21:37:32.107 回答