在我的公司,我们有几个伪独立的团队,每个团队拥有多个存储库(但有时会编辑另一个团队的代码)。大多数模块是相互依赖的,尽管最接近我们“基础设施”级别的模块基本上是独立于其他的。
目前我们有一堆脚本来处理诸如克隆和更新所有模块之类的事情,还需要(在这种情况下主要是自动化的)维护模块的文本列表。显然,这是我相信/希望git submodule
可以填补的角色。
我希望至少能够:
使用类似于 的单个命令克隆整个源代码树git clone main_repository
。
使用类似于 的命令更新整个源代码树git pull
。看起来这很简单git submodule foreach git pull
,尽管我可能会为git submodule foreach git
. 我们当前的设置并行执行此步骤(一次四个),我希望子模块设置执行相同的操作。看起来更新子模块会使它们显示为已更改(用于提交)。我可以理解这背后的逻辑,但是我们当前的系统在 .gitignore 中有伪子模块,因为您通常只关心自己模块的更改。
我想要一个git grep
适用于整个树的类比。乍一看,它似乎git submodule foreach git grep hello
可以工作,但如果没有找到搜索字符串(我们有几个很小的子模块,所以这通常是正确的)然后 grep 返回1
并且整个命令停止。
我想要 diff 和 status 的类似有用的类似物。
我可以想到一些解决方法,但是我们已经有一组 hacky 脚本来完成我想要的大部分工作,我希望/想知道是否有一个很好的标准简单方法来做到这一点。