提交代码时忽略文件的正确做法

在日常开发中,经常会遇到一些文件不需要提交到版本控制系统里,比如本地配置、缓存文件或依赖包。如果不小心把这些内容提交上去,不仅会让仓库变得臃肿,还可能泄露敏感信息。

为什么需要忽略文件

举个例子,你用 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 里还给提交了——这种事真不少见。