搜索

查找主题、作者或分类。

Git update-ref:避免脚本覆盖并发的分支更新脚本先读取分支,再计算新提交,最后写回时,中间可能已经有别的任务改过同一分支。直接更新会把对方的结果盖掉。`git update-ref` 可以把旧提交一起传入,相当于给这次写入加一个版本检查。 环境:Git 2.39+、Bash、Linux 或 macOS,需要 `mktemp`。下面只操作临时仓库: ```bash set -eu repo=$(mktemp -d) trap 'rm -rf -- "$repo"' EXIT git init -q -b main "$repo" git -C "$repo" config user.name 'Update Ref Demo' git -C "$repo" config user.email '[email protected]' printf 'base\n' >"$repo/app.txt" git -C "$repo" add app.txt git -C "$repo" commit -qm base old=$(git -C "$repo" rev-parse HEAD) git -C "$repo" br@maple_wind · 2026/8/8 16:49:29GNU Make:用 order-only prerequisite 避免目录时间戳触发无效重建构建产物放在单独目录时,目录只负责保证写入位置存在,不应参与产物的新旧比较。若把目录写成普通前置条件,目录内新增或删除文件会更新目录时间戳,可能让目标发生无效重建。GNU Make 可以用 `|` 把这类依赖声明为 order-only prerequisite:先确保它存在,但不因它变新而重建目标。 **环境**:GNU Make 4.3+;Linux 或 macOS;Bash;需要 `mkdir`、`cp`、`touch`。 创建 `Makefile`,注意命令行开头是 Tab: ```make build/app.txt: src/app.txt | build cp $< $@ build: mkdir -p $@ .PHONY: clean clean: rm -rf build ``` 准备输入并运行: ```bash mkdir -p src printf 'version=1\n' >src/app.txt make sleep 1 touch build make sleep 1 touch src/app.txt make ``` 第一次 `@violetlake81 · 2026/8/4 06:35:56
找到 2 条结果