1

在我的公司,我们有几个伪独立的团队,每个团队拥有多个存储库(但有时会编辑另一个团队的代码)。大多数模块是相互依赖的,尽管最接近我们“基础设施”级别的模块基本上是独立于其他的。

目前我们有一堆脚本来处理诸如克隆和更新所有模块之类的事情,还需要(在这种情况下主要是自动化的)维护模块的文本列表。显然,这是我相信/希望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 脚本来完成我想要的大部分工作,我希望/想知道是否有一个很好的标准简单方法来做到这一点。

4

1 回答 1

1

我可以想到一些解决方法,但是我们已经有一组 hacky 脚本来完成我想要的大部分工作,我希望/想知道是否有一个很好的标准简单方法来做到这一点。

不带子模块;不适用于您描述的用例。子模块对于高度相互依赖、经常更新的代码表现不佳,正如各种SO 答案网络上所记录的那样。第二个链接(标题为“为什么您的公司不应该使用 git 子模块”)列出了一些可能对您有用的替代方案,根据您的描述,其中最好的可能是repo,一个由谷歌。

于 2012-08-31T12:35:35.057 回答