Git 中 git update-index --skip-worktree与 .gitignore 的使用与区别
目录
在日常开发中,我们经常会遇到这样的问题:
- 本地编译 / 测试会生成大量
build产物 - 这些文件不希望被提交
- 但其中一部分文件已经被 Git 跟踪过
- 同时又希望 本地修改不影响仓库状态
本文结合实际工程经验,总结 git update-index --skip-worktree 与 .gitignore 的适用场景、用法以及常见误区。
git update-index --skip-worktree
适用对象:已经被 Git 跟踪(tracked)的文件
该命令的作用是:让 Git 在本地忽略某些已跟踪文件的改动,但不改变仓库历史,也不影响他人。

1. 单个文件
git update-index --skip-worktree <file>恢复跟踪:
git update-index --no-skip-worktree <file>2. 某目录下多个文件
git ls-files <target-dictionary>|xargsgit update-index --skip-worktree 
多个文件错误写法:

- ** 不是 Git 语法是否展开取决于 shell,git update-index 不会递归处理目录
- 必须先通过 git ls-files 列出已跟踪文件
- 再逐个设置 skip-worktree 标志
恢复跟踪:
git ls-files <target-dictionary>|xargsgit update-index --no-skip-worktree 3. 验证哪些文件被 skip
git ls-files -v |grep'^S'.gitignore
适用对象:从未被 Git 跟踪(untracked)的文件
.gitignore 本质是** 一个配置文件,而不是 Git 命令。**
方式一:命令行追加
echo"xys/doc/">> .gitignore gitadd .gitignore git commit -m "chore: ignore generated docs"方式二:手动编辑.gitignore
直接编辑文件,添加规则后再提交
方式三:使用GitLens插件
- 优点
可视化操作,对单个文件忽略比较方便
- 缺点
遇到同一目录下有多个文件需要ignore,或者某个文目录(及其子目录)下某个特定类型文件需要ignore,.gitignore 容易变得冗长、零散。
使用方式一或方式二直接编辑.ignore文件更简洁,例如
/verif/*/vip_tmp/ xys/doc/ xys/reference/build/obj/**/*.o 
除了gitignore还支持很多git操作可视化,可以自行探索