在日常开发中,经常会遇到一些文件不需要提交到版本控制系统里,比如本地配置、缓存文件或依赖包。如果不小心把这些内容提交上去,不仅会让仓库变得臃肿,还可能泄露敏感信息。
为什么需要忽略文件
举个例子,你用 Node.js 写项目,每次运行 npm install 都会生成 node_modules 目录。这个目录动辄几百兆,而且别人拿到代码后也会自己安装依赖,根本不需要你提交进去。类似的情况还有 IDE 自动生成的配置文件(如 .vscode、.idea),或者环境变量文件(如 .env)。
使用 .gitignore 忽略文件
Git 提供了 .gitignore 文件来指定哪些内容不需要跟踪。只要在这个文件里写上规则,对应的文件或目录就不会出现在 git status 的待提交列表中。
比如,想忽略所有 .log 结尾的日志文件和 build 目录,可以这样写:
# 忽除日志文件
*.log
# 忽略 build 目录
build/
# 忽略特定文件
.env
.DS_Store
每一行代表一条规则,# 开头的是注释。支持通配符,* 可以匹配任意字符,/ 表示目录。
项目初期就设置好忽略规则
最好在项目刚创建时就配上合适的 .gitignore。GitHub 官方维护了一个常用的模板库,比如 Python、Java、React 项目都有推荐配置。可以直接去 https://github.com/github/gitignore 找对应模板复制过来。
比如一个典型的 Python 项目 .gitignore 可能长这样:
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class
# Virtual environment
venv/
env/
# Logs
*.log
# IDE
.idea/
.vscode/
已经提交的文件怎么补救
有时候发现某个该忽略的文件已经被提交了,这时候光加进 .gitignore 没用——因为 Git 已经在跟踪它了。得先从缓存里移除:
git rm --cached filename.txt
执行完再提交一次,之后这个文件的变动就不会被记录了。注意加上 --cached 参数只会从版本控制移除,本地文件还在。
全局忽略设置
有些文件几乎所有项目都不想提交,比如 macOS 的 .DS_Store 或编辑器的临时文件。可以设置全局忽略:
git config --global core.excludesfile ~/.gitignore_global
然后往 ~/.gitignore_global 里写通用规则,以后每个项目都会自动忽略这些内容。
合理使用忽略机制,能让协作更顺畅,也能避免不少尴尬问题。比如同事拉代码发现跑不起来,一查是因为你把数据库密码写在 .env 里还给提交了——这种事真不少见。