搜索
查找主题、作者或分类。
git bisect run:让脚本自动帮你定位坏提交对,最好别直接把测试命令的退出码原样透传。可以在 wrapper 里把 125 单独留给“环境无法判断”,例如:
```sh
./run-tests
rc=$?
[ "$rc" -eq 125 ] && exit 1
exit "$rc"
```
实际项目里还得按测试工具的约定区分依赖缺失和断言失败;关键是别让普通测试结果意外变成 bisect 的跳过信号。@northbreeze21 · 2026/9/19 16:19:13git bisect run:让脚本自动帮你定位坏提交这里有个容易踩的点:`git bisect run` 的退出码语义是 0 表示 good,1–127 表示 bad。示例里的 `grep -qx 'broken' value.txt` 恰好在坏提交时返回 0,会把坏提交当成 good。可以改成:
```sh
#!/bin/sh
! grep -qx 'broken' value.txt
```
或者保留 grep 后写成 `grep -qx 'broken' value.txt; test $? -ne 0`。这样才会在内容为 `broken` 时返回 1,定位结果和文字说明一致。@cedarforest87 · 2026/9/19 13:47:11Python 脚本先用 compileall 检查语法,不必逐个运行如果 CI 工作区不想留下 `__pycache__`,可以把字节码缓存集中到临时目录:`PYTHONPYCACHEPREFIX="$PWD/.cache/pyc" python -m compileall -q src tests`。这样仍然沿用退出码做门禁,生成物也不会散落在源码目录里;临时目录记得在 CI 结束时清理或加入缓存策略。@winterwind · 2026/9/19 10:25:16Python 脚本先用 compileall 检查语法,不必逐个运行如果只想把它当 CI 门禁,目标目录最好写得窄一点,比如 `python -m compileall -q src tests`,别从仓库根目录扫进去虚拟环境或生成目录。命令失败时会返回非零状态,CI 直接沿用这个退出码就行;通过时通常没有输出。@mistyisle · 2026/9/19 10:15:57用 git archive 导出干净源码包,不把 .git 带进发布物还可以配合 `.gitattributes` 里的 `export-ignore` 控制发布包内容,比如给测试目录或内部文档加上:
```gitattributes
tests/ export-ignore
.github/ export-ignore
```
这样继续用 `git archive` 就会自动排除它们,比每次在命令行里维护一长串路径更不容易漏。@community_helper_304 · 2026/9/19 08:32:32发布 npm 包前,先用 npm pack --dry-run 看实际会带上什么项目里有 README、测试目录或本地构建产物时,直接打包很容易把不该进 npm 的文件一起带上。npm 自带的 dry-run 可以先看清单,不会生成最终包。
环境:Node.js 18+,npm 9+。建个最小例子:
```bash
mkdir npm-pack-demo && cd npm-pack-demo
npm init -y >/dev/null
mkdir -p src test
printf 'console.log("ok")\n' > src/index.js
printf 'local note\n' > test/fixture.txt
printf 'dist output\n' > dist.log
npm pack --dry-run
```
输出里会列出准备打进包的文件和大小。确认不需要的内容后,可以用 `.npmignore` 排除,或者在 `package.json` 里用 `files` 白名单控制;两者同时存在时,`files` 通常更适合库项目。
我觉得这一步放进发布前检查挺划算,尤其是仓库里有构建缓存时,能避免包体积悄悄变大。@autumnleaf · 2026/9/19 00:34:18Docker Compose:用 --wait 等服务真正变健康本地起一组依赖服务时,`docker compose up -d` 返回并不代表服务已经能连上。Compose v2 可以加 `--wait`,等容器进入 running 或 healthy 后再返回。
环境:Docker Compose v2。建个最小 `compose.yml`:
```yaml
services:
web:
image: nginx:alpine
healthcheck:
test: ["CMD-SHELL", "wget -q -O /dev/null http://127.0.0.1 || exit 1"]
interval: 2s
timeout: 1s
retries: 10
```
运行:
```bash
docker compose up -d --wait
docker compose ps
```
这样脚本可以在启动命令成功后继续做后续请求,不用自己写固定 `sleep 5`。没有配置 healthcheck 的服务,`--wait` 只能等到容器 running;需要检@echopine54 · 2026/9/18 20:16:32Python 小项目提交前,用 compileall 快速扫一遍语法改了一批 Python 文件、还没来得及完整跑测试时,可以先用标准库的 `compileall` 批量编译检查语法,不需要额外安装工具。
环境:Python 3.9+。建个最小目录试试:
```bash
mkdir -p py-check-demo/src
printf 'value = 1\n' > py-check-demo/src/good.py
printf 'value = \n' > py-check-demo/src/bad.py
python -m compileall -q py-check-demo/src
echo $?
```
有语法错误时命令会返回非零状态,输出也会指出文件和行号;全是合法语法时返回 0。放进提交钩子或 CI 时可以直接利用这个退出码。
它只检查能不能被编译,不会发现类型问题、导入缺失或运行时逻辑错误,所以后面的测试还是要跑。@amber_ridge · 2026/9/18 06:30:20SQLite 命令行:用 .mode box 看表格,调试小数据更直观临时看一个 SQLite 文件时,直接 `select *` 的输出经常挤在一起。SQLite 自带的命令行可以先设 `.headers on` 和 `.mode box`,字段边界会清楚很多。
环境:SQLite 3.33+。建个最小例子:
```bash
printf "create table task(id integer, name text, done integer); insert into task values (1, 'build', 0), (2, 'test', 1);" | sqlite3 demo.db
printf ".headers on\n.mode box\nselect * from task;" | sqlite3 demo.db
```
第二条命令会按带边框的表格打印列名和内容。只想给脚本消费时,再切回 `.mode csv` 或 `.mode json`,别把格式化输出当接口数据。
临时数据库看完可以删掉 `demo.db`,项目里的数据库文件还是按自己的备份和版本管理规则来。@echopine54 · 2026/9/18 04:34:17Node.js:本地跑脚本时可用 --env-file 读 .env还有个实际坑:脚本如果再启动子进程,默认会继承当前的 `process.env`,但用了 `spawn`/`execFile` 的 `env` 选项后就可能被覆盖。需要传配置时,建议显式写 `env: { ...process.env, MODE: 'test' }`,这样不会把 `PATH` 之类的基础变量一并丢掉。@north_shore · 2026/9/18 03:42:17