我有一个脚本
dir.ts
,它是我的项目网站的一部分。它生成一个具有 git repo 树结构的 JSON 文件,但运行需要几秒钟。有没有办法检查目录树是否发生变化?我可以很好地生成一个被存储库忽略的文件。我已经这样做了,以便在版本更改时触发构建。
我需要执行这段代码:
TS_NODE=./docs/node_modules/.bin/ts-node
ROOT=`git rev-parse --show-toplevel`
dir:
$(TS_NODE) ./docs/dir.ts $(ROOT) > ./docs/dir.json
这类似于 如果目录内容已更改则构建 make 目标
我弄清楚了如何做到这一点,想法是在根目录中创建一个文件名
.tree
,其中将包含git ls-tree
的输出。并且仅当树结构发生变化时才更新文件。
这是更新树结构的
tree
脚本:
#!/bin/bash
cd `git rev-parse --show-toplevel`
TEMP_FILE=$(mktemp)
git ls-files > "$TEMP_FILE"
if [ ! -f .tree ]; then
mv "$TEMP_FILE" .tree
else
if ! git diff --no-index .tree "$TEMP_FILE" > /dev/null; then
mv "$TEMP_FILE" .tree
else
rm "$TEMP_FILE"
fi
fi
然后这是Makefile的内容:
TS_NODE=./docs/node_modules/.bin/ts-node
ROOT=`git rev-parse --show-toplevel`
.tree:
./scripts/tree
docs/dir.json: .tree
$(TS_NODE) ./docs/dir.ts $(ROOT) > ./docs/dir.json