多仓库的 Git-bisect

9

我的代码中有一个bug,由于测试失败,很容易被重现。

到目前为止,在这种情况下我使用git-bisect,但只有当只有一个git repo时才有用。

在我的情况下有7个repo。

是否有一种像git-bisect一样的方法可以对N个git仓库进行操作?

更新

有一个“container”Repo,其中包含大部分配置文件。它与特定客户有关联。

然后是一个核心应用程序的repo。

然后是N个插件的repo,这些插件是为这个核心应用程序而设计的。

在这种情况下,不使用Git子模块。

更新2

到目前为止,我没有使用google repo工具。据我所知,它也无法进行bisect。


1
7个代码库?有什么原因吗?它们没有任何共同点吗?你不能创建第8个库,将其他7个库合并到其中,并组合历史记录,然后在那里运行二分查找吗? - Lasse V. Karlsen
1
这七个代码库是如何联系在一起的?它们中间有些是子模块或子树吗?哪些是库?有什么困难阻碍你确认包含漏洞的代码库是哪个吗? - Chris
我更新了问题并解释了为什么有几个 Git 仓库。 - guettli
假设其他仓库是子模块,你可以在每次 git bisect 后轻松运行 git submodule update,甚至可以编写脚本以便需要时使用。 - cmbuckley
你有没有建立所有代码库之间的版本对应关系的方法?例如,对于核心应用程序的给定版本,你能否确定可以与之一起使用哪些插件版本? - Leon
1
自行对日期进行二分,并在每个仓库中使用“git log --before”和“--after”查找与您正在测试的时间戳匹配的提交。检出所有仓库中相应的提交并进行检查。然后搜索下一个日期并再次进行测试,就像git bisect为单个仓库所做的那样。 - allo
1个回答

5
  1. 首先:找到测试通过的状态。

  2. 然后:检查当撤销其中一个仓库时,测试是否通过。

例如,假设:

  • the test passed when repositories were at commits :

    A1 A2 A3 A4 A5 A6 A7
    
  • the test doesn't pass when all repositories are at their new HEAD :

    B1 B2 B3 B4 B5 B6 B7
    

请尝试在以下配置中查看测试是否通过:

A1 B2 B3 B4 B5 B6 B7   
B1 A2 B3 B4 B5 B6 B7   
B1 B2 A3 B4 B5 B6 B7   
etc ...

如果您成功地通过这种方式隔离了一个单独的存储库:您只需要在该存储库上进行二分查找。

如果您无法将其缩减为单个存储库,请添加注释。 - LeGEC
A1 B2 B3 B4 B5 B6 B7等等这样的写法将不再可编译,因此无法使用。 - javagirl
如果插件系统在所有版本的7个repo中具有相同的接口,它仍然可以编译。 - LeGEC

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