使用 bencher run 进行分支选择
一个分支是 git 引用(即分支名称或标签)。
使用 bencher run CLI 子命令时,通过 --branch 选项或 BENCHER_BRANCH 环境变量选择一个分支。
当前的 git 哈希也可以通过 --hash 选项指定。
如果没有指定分支,则在可用的情况下使用当前的 git 分支名称。
否则,使用 main 作为默认分支。
同样,如果没有指定 git 哈希,则在可用的情况下使用当前的 git 哈希。
进行持续基准测试(即在 CI 中进行基准测试)时,您通常希望在已经存在的分支上创建或变基一个分支。
这被称为分支起始点。
起始点是在特定版本(和 git 哈希,如果可用)上的另一个分支。
使用 bencher run CLI 子命令时,可以通过 --start-point 选项选择一个起始点。
此外,使用 --start-point-hash 选项来为起始点指定一个特定的 git 哈希。
从起始点复制过来的数据量由 --start-point-max-versions 选项控制。
同样,阈值 可以通过 --start-point-clone-thresholds 标志从起始点复制过来。
为了防止漂移,使用 --start-point-reset 标志总是将分支重置到起始点。
--branch <BRANCH>
要选择一个分支,设置 --branch 选项或 BENCHER_BRANCH 环境变量为分支的名称、标识或 UUID。
如果指定的值是名称或标识且分支尚不存在,它将为您创建。
但是,如果指定的值是 UUID,则必须事先存在该分支。
如果两者都指定了,则 --branch 选项优先于 BENCHER_BRANCH 环境变量。
如果两者都未指定,Bencher CLI 会尝试查找当前的 git 分支。
它首先在当前工作目录中寻找 git 仓库。
如果不成功,它将继续到其父目录,并一路重试直到根目录。
如果找到 git 仓库,则使用当前的短分支名称。
但是,如果未找到 git 仓库,则使用 main 作为默认分支。
--hash <HASH>
40个字符的 SHA-1 提交哈希值。 如果两个报告具有相同的分支和哈希,他们将被认为是来自同一次提交。 因此,他们将有相同的分支版本号。
如果未提供,Bencher CLI会尝试查找当前的git哈希。 它首先在当前工作目录中寻找git仓库。 如果查找不成功,它会继续在其父目录中查找,并一直重试到根目录。 如果找到了git仓库,那么将会使用当前分支的HEAD git哈希。
--start-point <BRANCH>
使用指定的分支名称、标识或 UUID 作为起始点,用于branch 选项。
对于 GitHub,通常是拉取请求的 base 分支,
对于 GitLab,通常是合并请求的 target 分支。
--start-point 的主要用例是统计连续基准测试。
- 如果指定的起始点是一个空字符串,则忽略此选项。
- 如果
branch不存在,将使用此起始点创建它。 - 如果
branch已存在且起始点相同,则忽略此选项。 - 如果
branch已存在且起始点不同, 将使用此更新的起始点创建一个新的branchHead。 - 如果
branch不存在且起始点不存在, 则该branch将在没有任何历史数据的情况下被创建。 - 如果
branch已存在且起始点不存在, 则忽略此选项。
如果使用起始点创建了一个新的 branch,
则将从指定的起始点复制最近的数据和可选的阈值。
有关详细信息,请参阅--start-point-max-versions 选项和--start-point-clone-thresholds 选项。
例如,如果 feature_branch 尚不存在,但 main 存在并具有历史数据。
那么使用 --branch feature_branch --start-point main 将会:
- 创建一个名为
feature_branch的新分支 - 将最近的数据从
main复制到feature_branch bencher run将使用feature_branch进行处理
🐰 注意:使用环境变量时,应该将其用双引号包裹(如
--start-point "$MY_BRANCH_ENV_VAR"), 如果您希望在MY_BRANCH_ENV_VAR未定义时不出错地执行bencher run。
--start-point-hash <HASH>
使用指定的完整 Git 哈希作为branch选项的起始点。此选项需要设置--start-point选项。
- 如果
branch不存在,它将从指定哈希的start-point创建。 - 如果
branch存在且start-point与指定的哈希相同,则忽略此选项。 - 如果
branch存在并且start-point或指定的哈希不同,将从指定哈希的start-point创建新的branch分支头。 - 如果
branch不存在且start-point在指定哈希处不存在,则该branch将在没有任何历史数据的情况下创建。 - 如果
branch存在且start-point在指定的哈希处不存在,则忽略此选项。
如果通过起始点创建了新的branch,那么来自指定哈希的start-point的所有最新数据和可选的阈值将被复制。有关更多细节,请参见--start-point-max-versions 选项和--start-point-clone-thresholds 选项。
例如,如果存在feature_branch且其起始点是哈希为32aea434d751648726097ed3ac760b57107edd8b的main分支,则使用--branch feature_branch --start-point main --start-point-hash 68b12758509ca5e2b1e3983525625e532eb5f562将会:
- 移除旧的
feature_branch分支头 - 创建新的
feature_branch分支头 - 将来自
main在哈希68b12758509ca5e2b1e3983525625e532eb5f562的所有最新数据复制到新的feature_branch分支头 - 然后使用新的
feature_branch分支头执行bencher run
--start-point-max-versions <COUNT>
使用指定的历史分支版本最大数量,从起始点中为branch选项包含。超出此数量的版本将被省略。默认值是255版本。此选项需要设置--start-point选项。
例如,如果feature_branch的起始点为main分支,并且main有300个版本,那么使用--branch feature_branch --start-point main --start-point-max-versions 100只会在feature_branch中包含main的最近100个版本。
--start-point-clone-thresholds
克隆所有来自起始点的阈值用于branch选项。此标志需要设置 --start-point 选项。
- 如果阈值不存在,则会从
start-point阈值创建。 - 如果阈值存在且与
start-point阈值相同,则该阈值实际上被忽略。 - 如果阈值存在且其模型与
start-point阈值不同,则旧模型将被start-point阈值模型替换。 - 如果阈值存在且
start-point阈值不存在,则将移除该阈值模型。
例如,如果feature_branch 存在,其起始点为main 分支,并且main 有一个用于内置localhost 测试平台和latency 度量的阈值,那么使用--branch feature_branch --start-point main --start-point-clone-thresholds 将为feature_branch 创建一个新的localhost 测试平台和latency 度量的阈值。
--start-point-reset
重置指定的 branch。
当设置了 --start-point 选项时,
branch 将被重置到指定的起始点。
这对于防止统计连续基准测试数据的偏差非常有用。
在未指定起始点的情况下,--start-point-reset 的主要用例是相对连续基准测试。
- 如果
branch不存在且未指定起始点,将在没有任何历史数据的情况下创建该branch。 - 如果
branch存在且未指定起始点, 将在没有任何历史数据的情况下创建一个新的branchHead。 - 如果
branch不存在且指定了起始点, 将使用起始点创建该branch。 - 如果
branch存在且指定了起始点, 将使用起始点创建一个新的branchHead。
如果使用起始点创建新的 branch,
则从指定哈希值的 start-point 复制所有最新数据以及可选的阈值。
有关更多详细信息,请参阅--start-point-max-versions 选项和--start-point-clone-thresholds 选项。
例如,如果存在 feature_branch 而没有起始点,
那么使用 --branch feature_branch --start-point-reset 会:
- 移除旧的
feature_branchHead - 创建一个没有历史数据的新
feature_branchHead bencher run随后将使用新的feature_branchHead 进行
🐰 恭喜!您已经学会了所有关于分支选择的知识!🎉