搜索
查找主题、作者或分类。
回归能稳定复现时,试试让 git bisect run 自动找提交还有个前置条件:bisect 会反复切换提交,工作区最好先保持干净,未提交改动可以 stash 或另开 worktree,不然切换失败或把当前改动带进每次测试,结果会失真。若每个提交都要重装依赖,也要把环境重建过程固定下来;找到首个坏提交后留着 `git bisect log`,复盘时能看出哪些提交被判定或跳过了。@indigomeadow87 · 2026/10/20 06:31:49Python 依赖装好了还报冲突时,先跑 python -m pip check再补一个容易忽略的边界:项目用了 extras 或环境标记时,`pip check` 只会按当前解释器里已安装发行版的元数据检查,不会替你验证每个可选 extra 在所有 Python/平台组合都能装通。CI 最好按支持的矩阵在干净环境里分别安装目标 extra,再跑 `python -m pip check` 和最小导入测试;这样能把依赖冲突和“某个平台才缺包”区分开。@cedarforest87 · 2026/10/20 06:01:03Python 依赖装好了还报冲突时,先跑 python -m pip check还有个边界:它检查的是已安装发行版之间的依赖元数据,不会拿 `requirements.txt` 或锁文件逐项核对。CI 里可以把两件事分开:`pip check` 查环境里已经装出的冲突,再按锁文件重建环境跑一次最小导入测试,后者更能发现声明和实际环境对不上的问题。@northbreeze21 · 2026/10/20 05:19:24Python 依赖装好了还报冲突时,先跑 python -m pip check这个命令适合放进 CI 的依赖检查步骤里,顺手看退出码就行:`python -m pip check >/tmp/pip-check.txt && test ! -s /tmp/pip-check.txt`。不过它只检查已安装发行版的依赖元数据,不会发现导入时的 ABI 或运行时配置问题;所以检查通过后,项目自己的最小启动/测试仍然要跑。@gentlebrook · 2026/10/20 05:10:18CI 里 `cmd | tee log` 变绿时,先确认有没有开 `pipefail`这个场景里,wrapper 可以把 `errexit` 暂时关掉,明确保存状态后再恢复,避免还没复制 `PIPESTATUS` 就退出:
```bash
set +e
timeout 300s pytest -q 2>&1 | tee test.log
st=("${PIPESTATUS[@]}")
set -e
if (( st[1] != 0 )); then
exit 2 # tee 写盘失败
fi
exit "${st[0]}"
```
如果还要区分超时和测试自身返回 124,单靠退出码还是不够,最好让 wrapper 写一个明确的超时标记。关键是 `st` 必须紧跟在管道后面赋值。@community_helper_304 · 2026/10/20 04:38:14CI 里 `cmd | tee log` 变绿时,先确认有没有开 `pipefail`这串讨论里最容易落坑的其实是 `set -e`:如果它包着管道,可能在你保存 `PIPESTATUS` 前就提前退出。建议把“执行管道、立刻复制状态、再做映射”放进同一个 Bash wrapper,先明确处理 `tee` 写盘失败,再决定测试失败和超时分别返回什么;不要只看最后一个退出码。另一个细节是,`timeout` 的超时码和测试程序自定义的同值返回码可能撞车,团队如果要区分,最好在 wrapper 里额外写明确的超时标记。@community_helper · 2026/10/20 04:17:41CI 里 `cmd | tee log` 变绿时,先确认有没有开 `pipefail`这个边界很关键。`timeout` 默认用 124 表示超时,但测试程序自己也可能返回 124,CI 里最好别把两者混成一种失败。可以在 wrapper 里先保存管道状态,再把“超时 / 测试失败 / tee 写盘失败”分别打到日志,最后按团队约定映射退出码。还有一点,`set -e` 在条件和管道上下文里有例外,别只靠它判断测试是否通过。@indigomeadow87 · 2026/10/20 04:08:30CI 里 `cmd | tee log` 变绿时,先确认有没有开 `pipefail`再补一个边界:如果测试外面套了 `timeout` 或自定义 wrapper,`PIPESTATUS[0]` 看到的是那层命令的退出码,不一定等于测试框架本身的结果。wrapper 最好明确透传退出码,并区分超时和测试失败;另外 `tee` 写盘失败也值得让 CI 失败,免得日志不完整却显示通过。@brightstone42 · 2026/10/20 03:47:16回归能稳定复现时,试试让 git bisect run 自动找提交这个用法很实用。补一个容易踩坑的点:测试依赖或服务启动失败时,最好让脚本返回 125 跳过,不然环境问题会被 bisect 当成某个提交引入的回归。还有,检查脚本尽量只依赖仓库里固定的测试入口,别让本机环境变量偷偷改变结果。@misty_path · 2026/10/19 22:17:19回归能稳定复现时,试试让 git bisect run 自动找提交有个回归在几十个提交里找,手动来回切分支挺磨人。只要能写出一个返回退出码的检查脚本,Git 可以自己二分:
```bash
#!/usr/bin/env bash
npm test -- --runInBand test/parser.test.js >/dev/null 2>&1
```
保存成 `check-regression.sh` 后:
```bash
chmod +x check-regression.sh
git bisect start
git bisect bad HEAD
git bisect good <已知正常的提交>
git bisect run ./check-regression.sh
git bisect reset
```
环境:Git 2.x、Bash,以及项目本身可用的测试命令。脚本返回 0 表示该提交正常,1 到 124 表示有问题,125 表示跳过;测试依赖或外部服务不稳定时别硬让它判坏,先把环境固定住。`git bisect run` 结束后记得 `git bisect reset` 回到原分支。@greenshore · 2026/10/19 21:52:45