有人可以解释什么是 SVN 平分算法吗?理论上和通过代码片段
Could someone explain what an SVN bisect algorithm is? Theoretically and through code snippet
我想了解什么是 SVN bisect / git-bisect algorithm..我尝试搜索在线资源但无法获得好的问题陈述和解决方案。
简而言之,bisect 的思想是二进制搜索。
平分的想法基于几个假设:
- 有一个特定的应用程序行为(为简单起见,我们称它为 "defect")并且您想找出其原因。
- 代码分析和调试太费劲了。
- 构建任何版本并运行对其进行测试比代码分析和调试要容易得多。
- 您知道过去的一些代码修订没有这个缺陷。
一个直接的方法是构建以前的版本并测试它是否有这个缺陷。如果有,则先测试一个版本。您继续,直到找到引入此错误的修订版。您知道此提交中的所有更改。这就是为什么更容易找到究竟是什么变化导致了缺陷。调试也可以更容易,因为您可以(通常)专注于一些更改。
但是如果已知没有缺陷的修订是最近修订之前的过去200次修订,则可能需要重复"build and test"程序200次(如果你运气不好的话)。
让我们将没有缺陷的修订命名为 R0,将有缺陷的修订命名为 R200。
Bisect 可以让它更快。您 "tell" 将有缺陷的修订版和没有缺陷的修订版一分为二。然后平分计算这些修订之间的提交次数。在我们的例子中,这些是 200 次提交。 Bisect 在有缺陷的修订之前进行了 100 次修订,并将其检出。意思是,它检查修订版 R100。您构建它并进行测试。然后你 "tell" 平分此修订是否包含缺陷。如果有缺陷,则表示它是在版本 R0 和 R100 之间引入的。如果没有缺陷,则表示缺陷是后来引入的,在修订版 R100 之后,在 R100 和 R200 之间。
假设你告诉 bisect R100 有缺陷。然后二分法取范围 R0 - R100 的中间值。这将是修订版 R50。 Bisect 检查出来。你构建它并测试并告诉结果平分。
假设R50没有缺陷。意思是,它是在修订版 R50 和 R 100 之间引入的。Bisect 再次占据中间,修订版 R75。您构建并测试它。
假设R75有缺陷。意味着它是在 R50 和 R75 之间引入的。 Bisect 检查出 R63。答等
您总共需要 log(200) = 8 个步骤。如果您要检查 每个 版本,您将构建和测试多达 200 个修订版,这将花费更长的时间。
In case of Git,你首先用命令
开始平分程序
git bisect start
然后你检查有缺陷的修订和运行命令
git bisect bad
然后你告诉bisect什么版本没有缺陷:
git bisect good R0
通过这个命令Git bisect 将找到中间的 R100,并检查它。您构建并测试它,如果它包含缺陷,运行 命令
git bisect bad
否则命令
git bisect good
如此继续,直到您的修改发现引入了缺陷。
我想了解什么是 SVN bisect / git-bisect algorithm..我尝试搜索在线资源但无法获得好的问题陈述和解决方案。
简而言之,bisect 的思想是二进制搜索。
平分的想法基于几个假设:
- 有一个特定的应用程序行为(为简单起见,我们称它为 "defect")并且您想找出其原因。
- 代码分析和调试太费劲了。
- 构建任何版本并运行对其进行测试比代码分析和调试要容易得多。
- 您知道过去的一些代码修订没有这个缺陷。
一个直接的方法是构建以前的版本并测试它是否有这个缺陷。如果有,则先测试一个版本。您继续,直到找到引入此错误的修订版。您知道此提交中的所有更改。这就是为什么更容易找到究竟是什么变化导致了缺陷。调试也可以更容易,因为您可以(通常)专注于一些更改。
但是如果已知没有缺陷的修订是最近修订之前的过去200次修订,则可能需要重复"build and test"程序200次(如果你运气不好的话)。
让我们将没有缺陷的修订命名为 R0,将有缺陷的修订命名为 R200。
Bisect 可以让它更快。您 "tell" 将有缺陷的修订版和没有缺陷的修订版一分为二。然后平分计算这些修订之间的提交次数。在我们的例子中,这些是 200 次提交。 Bisect 在有缺陷的修订之前进行了 100 次修订,并将其检出。意思是,它检查修订版 R100。您构建它并进行测试。然后你 "tell" 平分此修订是否包含缺陷。如果有缺陷,则表示它是在版本 R0 和 R100 之间引入的。如果没有缺陷,则表示缺陷是后来引入的,在修订版 R100 之后,在 R100 和 R200 之间。
假设你告诉 bisect R100 有缺陷。然后二分法取范围 R0 - R100 的中间值。这将是修订版 R50。 Bisect 检查出来。你构建它并测试并告诉结果平分。
假设R50没有缺陷。意思是,它是在修订版 R50 和 R 100 之间引入的。Bisect 再次占据中间,修订版 R75。您构建并测试它。
假设R75有缺陷。意味着它是在 R50 和 R75 之间引入的。 Bisect 检查出 R63。答等
您总共需要 log(200) = 8 个步骤。如果您要检查 每个 版本,您将构建和测试多达 200 个修订版,这将花费更长的时间。
In case of Git,你首先用命令
开始平分程序git bisect start
然后你检查有缺陷的修订和运行命令
git bisect bad
然后你告诉bisect什么版本没有缺陷:
git bisect good R0
通过这个命令Git bisect 将找到中间的 R100,并检查它。您构建并测试它,如果它包含缺陷,运行 命令
git bisect bad
否则命令
git bisect good
如此继续,直到您的修改发现引入了缺陷。