忽略文件配置(.gitignore)
什么是.gitignore文件
.gitignore
是一个纯文本文件,用于告诉Git哪些文件或目录应该被忽略,不被纳入版本控制。这个文件通常放在项目的根目录下,但也可以放在子目录中,子目录中的.gitignore
文件只对该目录及其子目录有效。
当执行git add
命令时,Git会检查.gitignore
文件中的规则,匹配到的文件不会被添加到暂存区。这对于排除编译生成的文件、日志文件、本地配置文件等非常有用。
.gitignore文件的基本语法
.gitignore
文件使用简单的模式匹配规则:
- 空行或以
#
开头的行会被忽略(#
用于注释) - 标准的glob模式匹配
- 以斜杠
/
开头防止递归 - 以斜杠
/
结尾指定目录 - 以叹号
!
开头表示取反
# 忽略所有.log文件
*.log
# 但不要忽略important.log
!important.log
# 只忽略当前目录下的TODO文件,不包括子目录中的TODO
/TODO
# 忽略build/目录下的所有文件
build/
# 忽略doc目录下的.txt文件,但不包括子目录中的.txt文件
doc/*.txt
# 忽略doc目录及其子目录下的所有.pdf文件
doc/**/*.pdf
常见需要忽略的文件类型
不同的项目类型需要忽略不同的文件,下面是一些常见的例子:
前端项目
# 依赖目录
node_modules/
# 构建输出目录
dist/
build/
out/
# 缓存文件
.cache/
# 环境变量文件
.env
.env.local
.env.development
.env.production
# 日志文件
*.log
logs/
# 编辑器目录和文件
.idea/
.vscode/
*.swp
*.swo
.DS_Store
Python项目
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class
# C extensions
*.so
# Distribution / packaging
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
*.egg-info/
.installed.cfg
*.egg
MANIFEST
# PyInstaller
*.manifest
*.spec
# Installer logs
pip-log.txt
pip-delete-this-directory.txt
# Unit test / coverage reports
htmlcov/
.tox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
.hypothesis/
.pytest_cache/
全局.gitignore文件
除了项目特定的.gitignore
文件外,还可以设置全局的.gitignore
文件,适用于所有Git仓库。这对于忽略特定于开发环境的文件(如编辑器配置文件)非常有用。
设置全局.gitignore
文件:
git config --global core.excludesfile ~/.gitignore_global
然后在~/.gitignore_global
文件中添加全局忽略规则:
# macOS
.DS_Store
# Windows
Thumbs.db
ehthumbs.db
Desktop.ini
# Linux
*~
# Editors
.idea/
.vscode/
*.swp
*.swo
高级模式匹配
.gitignore
支持更复杂的模式匹配:
**
匹配任意层级的目录?
匹配单个字符[]
匹配字符范围
# 忽略所有目录下的temp文件
**/temp
# 忽略所有扩展名为.tmp或.temp的文件
*.[t]?mp
# 忽略a.txt, b.txt, ..., z.txt
[a-z].txt
# 忽略所有以~结尾的文件
*~
特殊情况处理
有时候需要忽略除特定文件外的所有文件:
# 忽略目录下的所有文件
folder/*
# 但不忽略folder/important.txt
!folder/important.txt
# 也不忽略folder/subfolder/
!folder/subfolder/
注意:如果父目录被忽略,子目录的取反规则不会生效。例如:
# 这样不会生效
folder/
!folder/subfolder/
# 应该这样写
folder/*
!folder/subfolder/
调试.gitignore规则
如果.gitignore
规则没有按预期工作,可以使用以下命令检查:
git check-ignore -v <file>
例如:
git check-ignore -v node_modules/package.json
这会显示哪个.gitignore
文件的哪条规则匹配了该文件。
已跟踪文件的处理
.gitignore
只对未跟踪的文件有效。如果文件已经被Git跟踪,即使后来添加到.gitignore
中,Git仍会继续跟踪它。要从Git中删除已跟踪的文件(但保留在本地文件系统中),使用:
git rm --cached <file>
例如,要停止跟踪已提交的config.local.js
文件:
git rm --cached config.local.js
git commit -m "Stop tracking config.local.js"
多语言项目示例
下面是一个多语言项目(包含前端和后端)的.gitignore
示例:
# 前端部分
node_modules/
dist/
build/
*.min.js
*.min.css
.sourcemaps/
.parcel-cache/
# 后端部分
__pycache__/
*.pyc
*.pyo
*.pyd
.env
venv/
*.sqlite3
# 通用
.DS_Store
.idea/
.vscode/
*.log
logs/
tmp/
*.tmp
*.bak
*.swp
*.swo
忽略已删除的文件
有时候需要忽略已经被删除的文件,防止它们再次被添加。可以在.gitignore
中添加:
# 忽略已删除的文件
deleted-file.txt
removed-folder/
模板和生成文件
对于经常需要生成的文件(如从模板生成),可以这样处理:
# 忽略生成的配置文件
config/*.generated.*
!config/*.example.*
# 忽略自动生成的文档
docs/generated/
平台特定文件
不同操作系统生成的文件可能需要特别处理:
# macOS
.DS_Store
._*
# Windows
Thumbs.db
Desktop.ini
# Linux
*~
性能考虑
.gitignore
规则会影响Git的性能,特别是在大型项目中。一些优化建议:
- 尽量使用具体路径而非通配符
- 将常用规则放在文件顶部
- 避免过于复杂的模式匹配
- 对于大型目录(如
node_modules
),明确忽略整个目录
版本控制.gitignore文件
通常应该将.gitignore
文件本身纳入版本控制,以便所有开发者共享相同的忽略规则。但是,有时可能需要个人特定的忽略规则,这时可以使用:
- 项目中的
.gitignore
存放共享规则 - 本地
.git/info/exclude
存放个人特定规则
.git/info/exclude
的语法与.gitignore
相同,但只对当前仓库有效。
实际项目中的最佳实践
- 在项目初始化时就创建
.gitignore
文件 - 根据项目类型选择合适的模板
- 定期审查
.gitignore
文件,移除不再需要的规则 - 为不同的开发环境(开发、测试、生产)配置适当的忽略规则
- 在团队中共享
.gitignore
文件,保持一致性
常见问题解决
问题1:.gitignore
似乎不起作用
解决方案:
- 检查文件是否已经被Git跟踪(
git ls-files <file>
) - 检查
.gitignore
文件位置是否正确 - 确保没有语法错误
- 检查是否有更具体的规则覆盖了你的规则
问题2:需要临时忽略已跟踪的文件
解决方案:
- 使用
git update-index --assume-unchanged <file>
临时忽略更改 - 恢复使用
git update-index --no-assume-unchanged <file>
问题3:不同操作系统路径分隔符问题
解决方案:
- 在
.gitignore
中使用/
作为路径分隔符(Git会自动处理平台差异) - 避免使用
\
作为路径分隔符
自动化工具
有一些工具可以帮助生成和维护.gitignore
文件:
- gitignore.io - 在线生成各种项目的
.gitignore
文件 git ignore
命令(需要安装git-extras)
使用git-extras的例子:
# 安装git-extras
brew install git-extras
# 为Node.js项目生成.gitignore
git ignore node > .gitignore
本站部分内容来自互联网,一切版权均归源网站或源作者所有。
如果侵犯了你的权益请来信告知我们删除。邮箱:cc@cccx.cn
上一篇:颜色显示配置
下一篇:SSH密钥生成与配置