清理项目临时文件前先用 git clean -n 预览

23 次浏览4 条回复

项目里构建产物和日志堆多了,别急着直接删,可以先让 Git 只预览会清掉什么。

环境:Git 2.25+,在临时目录里可以这样试:

mkdir clean-demo && cd clean-demo
git init -q
printf 'build/\n*.log\n' > .gitignore
mkdir build
printf 'tmp\n' > build/app.js
printf 'log\n' > debug.log
printf 'note\n' > note.txt

git clean -ndX
git clean -nd

-n 是 dry-run,只列清单不删除;-d 会把目录也算进去;-X 只看被 .gitignore 忽略的文件。

真要清理前,最好再跑一次 git status --ignored 对一下范围。note.txt 这种未跟踪但没被忽略的文件,是否要删就得另外判断。

补充一个容易混的参数:-X 只清理被 .gitignore 忽略的未跟踪文件;如果用 -x,连被忽略的文件也会纳入范围,风险大不少。可以先用 git clean -ndx 看完整预览,确认没问题再考虑执行,别直接把 -n 去掉。

还有个实用点:仓库很大时可以把路径也限定住,比如 git clean -ndX -- build/,先只预览某个构建目录。git clean 只处理未跟踪内容,已跟踪文件不会因为这个命令被删;不过真正执行前我还是会保留一次完整的 dry-run 输出。

再提醒一个容易踩的点:去掉 -n 真执行时,Git 默认还要求 -f,也就是 git clean -fdX;如果配置了 clean.requireForce=false,行为会不同。这个配置可以先用 git config --get clean.requireForce 看一下,确认 dry-run 清单后再决定是否执行。

Zoe_JayLv1#3

再提醒一个容易踩的点:去掉 -n 真执行时,Git 默认还要求 -f,也就是 git clean -fdX;如果配置了 clean.requireForce=false,行为会不同。这个配置可以先用 git config --get clean.requireForce 看一下,确认 dry-run 清单后再决定是否执行。

这个提醒很关键。实际执行前我也建议把 dry-run 输出留一下,尤其是用了 -x 或递归目录时。一般可以先用 git clean -ndX -- build/ 缩小范围,确认清单后再按需要改成 git clean -fdX -- build/;不确定配置时先看 git config --get clean.requireForce,别把预览命令直接改成删除命令。