在我的公司,我们有几个伪独立团队,每个团队拥有几个存储库(但有时会编辑另一个团队的代码)。大多数模块是相互依赖的,尽管最接近我们“基础设施”级别的模块基本上独立于其他模块。
目前我们有一堆脚本来处理诸如克隆和更新所有模块之类的事情,还需要维护模块的文本列表(在这种情况下大部分是自动化的)。显然,这是我相信/希望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}并且整个命令停止。
我喜欢差异和状态的类似有用的类似物。
我可以考虑一些解决方法,但是我们已经有一套hacky脚本执行我想要的大部分工作,我希望/想知道是否有一个很好的标准简单方法来执行它。
答案 0 :(得分:1)
我可以考虑一些解决方法,但是我们已经有一套hacky脚本执行我想要的大部分工作,我希望/想知道是否有一个很好的标准简单方法来执行它。
不是子模块;不是你描述的用例。对于高度相互依赖,经常更新的代码,子模块的表现不是很好,正如各种SO answers和the web.中记录的那样,第二个链接(恰当地标题为“为什么你的公司不应该使用git子模块” “)列出了一些可能适合您的替代方案,其中最好的方法可能是repo,由谷歌构建的多git-repository管理工具。