N个仓库的git-bisect

8
我们的软件是模块化的,一个项目中有大约20个git仓库。如果测试失败,由于多个开发人员在这20个仓库上工作,有时很难找到匹配的提交记录。我知道测试昨天是正常的,今天不行了。有时候我会使用git-bisec,但这只适用于一个git仓库。通常情况下,两个git仓库的更改会导致测试失败。我可以编写一个简单的脚本来遍历我的N个git仓库,但在这样做之前,我想知道专家们如何解决这个问题。我使用Python、Django和pytest,但据我所知,这并不影响这个问题。

可能是 https://dev59.com/emHVa4cB1Zd3GeqPn4xG 的重复问题。 - Phillip
4
@Phillip提供的链接似乎非常有用,但是我想说“这就是为什么要使用子模块的原因。这几乎是使用子模块的主要目的:记录哪些提交一起构建了一个项目,这样从多个基础版本来构建项目就不成问题了。”如果您使用了子模块,二分查找功能将能够完美地工作。 - jthill
尝试手动缩小搜索范围:找到复杂应用程序正常运行的时刻,然后它出现了故障。是否可以将整个提交列表制作成一行,并进行检查? - Eugene Lisitsky
@jthill 到目前为止,我们还没有使用 git 子模块。我认为这个问题也可以在没有它们的情况下解决。可能会更困难一些,但并非不可能。 - guettli
我们所有的代码都在python虚拟环境中的~/src目录下。第三方代码通过pip安装。 - guettli
显示剩余2条评论
2个回答

3
我个人更喜欢使用 repo tool来管理复杂的项目。将这20个repo放在manifest.xml中,每次构建开始时创建补丁清单,如果构建失败,则执行repo diff manifests以查看更改的内容和位置。

repo-tools看起来很不错。它也适用于非Android项目吗?我们正在开发一个Django应用程序。 - guettli
是的,它的代码库是基于.git的。 - Filip Stefanov

3

有一个针对“反依赖”CI构建的QA工具类别。这样,每当进行较低级别的更改时,您的高级项目就会重新构建。在大规模情况下,它可能会消耗资源。

如果您停止处理存储库之间的关系,并开始遵循子组件版本发布方法,则可以消除整个问题类别。然后,您可以跟踪较低级别依赖项的版本,并知道何时进行升级会出现故障。如果您想要系统化,您的CI可以针对多个依赖项版本进行构建。

Git子模块可以完成单个提交的跟踪,因此您可以再次决定何时合并来自较低层次的更改。(值得注意的是,如果您仅更新到已标记的发布提交,它也可以像已发布的版本一样使用。)


你使用哪个“反向依赖”CI构建类别的QA工具? - guettli
我们目前的商店以前在旧的CI服务器上使用Jenkins脚本来完成这项工作。 - Joe Atzberger
我们已经在使用Jenkins。它从我们这里拉取N个仓库(全部来自主分支(敏捷开发)),并尝试测试特定的项目。一个项目非常小,大多数是配置,只有少量的编码行。你现在使用什么工具? - guettli
我们转向了Travis CI,并采用更正式的SemVer版本发布。 - Joe Atzberger

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