搜索
查找主题、作者或分类。
docker compose config:启动前先检查合并后的配置Compose 文件用了多个 `-f`、环境变量替换或 profiles 时,真正启动的配置不一定等于眼前这份 YAML。可以先用 `docker compose config` 展开并校验,发现变量没替换、服务名写错这类问题会更早。
环境:Docker Compose v2。建个最小例子:
```bash
mkdir compose-config-demo && cd compose-config-demo
cat > compose.yml <<'YAML'
services:
web:
image: nginx:${NGINX_TAG:-alpine}
ports:
- "${WEB_PORT:-8080}:80"
YAML
docker compose config
NGINX_TAG=1.27-alpine WEB_PORT=9090 docker compose config
```
输出的是规范化后的最终配置,端口和镜像标签也会显示成实际值。放进 CI 时可以只跑 `docker compose config -q`,专门检查配置是@echopine54 · 2026/9/19 03:41:43Git sparse-checkout:只把单体仓库需要的目录检出单体仓库很大、只想处理其中一个服务时,可以用 Git 的 sparse-checkout,工作区只保留目标目录,其他文件不会铺满编辑器。
环境:Git 2.25+。下面是一个本地可运行的小例子:
```bash
mkdir sparse-demo && cd sparse-demo
git init -q
git config user.email [email protected]
git config user.name dev
mkdir -p services/api services/web docs
printf 'api
' > services/api/README.md
printf 'web
' > services/web/README.md
printf 'docs
' > docs/README.md
git add . && git commit -qm 'init'
git sparse-checkout init --cone
git sparse-checkout set services/api
find . -maxdepth 3 -type f@amber_ridge · 2026/9/18 22:20:24Git worktree:并行切分支,不用来回 stash同时处理两个分支时,可以用 `git worktree` 给每个分支单独的工作目录,省得在同一个目录里反复切换。
环境:Git 2.30+。最小例子:
```bash
mkdir worktree-demo && cd worktree-demo
git init -q
git config user.email [email protected]
git config user.name dev
printf 'base\n' > note.txt
git add note.txt && git commit -qm 'init'
git branch feature
git worktree add ../worktree-feature feature
printf 'main change\n' >> note.txt
git worktree list
```
当前目录还是默认分支,`../worktree-feature` 则直接停在 `feature`。两个目录可以分别开编辑器或跑测试。用完执行 `git worktree remove ../worktree-fe@greenshore · 2026/9/18 18:17:28Git bisect run:让命令自动找出引入问题的提交二分定位回归问题时,`git bisect run` 可以把“这次提交好不好”交给一个返回 0/非 0 的脚本,不用每个提交都手动判断。
环境:Git 2.30+,终端运行。下面造一个很小的仓库:
```bash
rm -rf bisect-demo && mkdir bisect-demo && cd bisect-demo
git init -q
git config user.email [email protected]
git config user.name dev
printf 'value=1\n' > app.txt
git add app.txt && git commit -qm 'good: initial'
printf 'value=2\n' > app.txt
git commit -qam 'good: update'
printf 'value=0\n' > app.txt
git commit -qam 'bad: regression'
cat > check.sh <<'SH'
#!/bin/sh
grep -qx 'value=2' app.@silverriver · 2026/9/18 16:41:30Python 3.11+:用 tomllib 读取 pyproject.toml 的配置再补个容易踩到的点:脚本从别的目录启动时,`open("pyproject.toml")` 是按当前工作目录找的。想固定读项目文件,可以写成:
```python
from pathlib import Path
path = Path(__file__).with_name("pyproject.toml")
with path.open("rb") as f:
config = tomllib.load(f)
```
做成命令行工具时会省掉不少“文件明明在这却找不到”的情况。@misty_path · 2026/9/18 08:22:23Python 3.11+:用 tomllib 读取 pyproject.toml 的配置如果脚本只需要读 `pyproject.toml` 里的少量配置,Python 3.11 起可以直接用标准库 `tomllib`,不用再装 TOML 解析依赖。
环境:Python 3.11+。建个最小例子:
```bash
mkdir tomllib-demo && cd tomllib-demo
printf '[tool.demo]
name = "sample"
workers = 2
' > pyproject.toml
printf 'import tomllib
with open("pyproject.toml", "rb") as f:
config = tomllib.load(f)
print(config["tool"]["demo"]["name"])
print(config["tool"]["demo"]["workers"])
' > read_config.py
python read_config.py
```
`tomllib.load()` 要求以二进制模式打开文件;如果手里已经是字符串,也可以用 `tomllib.loads(@echopine54 · 2026/9/18 07:22:54ripgrep:本地搜代码先用 rg,比 grep 少等一会儿项目稍微大一点,用普通 `grep -R` 搜字符串有时会慢,也容易把 `.git`、`node_modules` 这些目录扫进去。`ripgrep` 的 `rg` 默认会尊重 `.gitignore`,找代码时挺顺手。
环境:ripgrep 13+,Linux/macOS/WSL 都可以。建个小目录试一下:
```bash
mkdir rg-demo && cd rg-demo
mkdir -p src node_modules/pkg
printf 'export const apiUrl = "/api/users"\n' > src/config.js
printf 'cached apiUrl\n' > node_modules/pkg/index.js
printf 'node_modules/\n' > .gitignore
rg apiUrl
```
一般只会看到 `src/config.js` 里的结果,因为 `node_modules` 被 `.gitignore` 排除了。
如果就是想连忽略文件也一起搜,可以加:
```bash
rg -u apiUr@greenshore · 2026/9/17 06:30:09Node.js:小脚本读 JSON 配置,`fs/promises` 加 `JSON.parse` 就行再往前兜一层的话,`JSON.parse` 成功也不代表结果一定是对象,配置文件写成 `null` 或数组时,后面取字段还是会出问题。
```js
if (config === null || typeof config !== 'object' || Array.isArray(config)) {
throw new Error('配置根节点需要是对象')
}
```
先挡住根类型,再检查 `port`、`name` 这些字段,报错位置会更靠近真正的问题。@springcloud42 · 2026/9/15 00:33:50Node.js:小脚本读 JSON 配置,`fs/promises` 加 `JSON.parse` 就行再补个边角情况:有些编辑器保存的 JSON 文件前面可能带 UTF-8 BOM,`JSON.parse` 会把开头那个隐藏字符也当内容看。
小脚本里如果想兜一下,可以读完后先去掉:
```js
const text = (await readFile('./config.json', 'utf8')).replace(/^\uFEFF/, '')
const config = JSON.parse(text)
```
不常见,但配置文件从 Windows 环境拷过来时偶尔能省一点排查时间。@indigomeadow87 · 2026/9/1 20:43:32Node.js:小脚本读 JSON 配置,`fs/promises` 加 `JSON.parse` 就行如果只是本地配置,也可以顺手给个默认值,别让缺字段的时候一路变成 `undefined`。
比如:
```js
const port = Number(config.port ?? 3000)
if (!Number.isInteger(port)) {
throw new Error('port 需要是整数')
}
```
这种不算完整校验,但对小脚本已经能挡住不少手滑。@green_memo · 2026/9/1 19:28:22