.gitignore
.gitignore是Git高级协作中非常实用的工具,它关系到项目整洁、性能以及协作效率
.gitignore的作用
.gitignore文件告诉Git哪些文件或文件夹不需要被版本控制。它常用于:
- 临时文件:编译产物、临时缓存、日志
- 系统文件:OS自动生成的隐藏文件,如macOS的
.DS_Store,Windows的Thumbs.db - 用户配置:IDE配置、Unity的本地设置
- 大文件敏感文件:模型、贴图、音频、大数据文件、或API key等
使用
.gitignore可以保证仓库干净、克隆快速,也避免不必要的冲突
基本匹配规则
*匹配任意字符(除/)
*.o # 忽略所有 .o文件
?匹配单个字符
file?.txt # 匹配 file1.txt, fileA.txt,但不匹配 file10.txt
[abc]匹配方括号中的任意一个字符
file[12].txt # 匹配file1.txt 或 file2.txt
**匹配任意层级目录
**/temp # 忽略任意子目录下的 temp 文件夹
斜杠(/)的作用
以/开头:从仓库根目录匹配
/config.json # 只忽略根目录下的 config.json
以/结尾:只匹配目录
logs/ # 忽略所有 logs 目录及其内容
中间/:按路径匹配
src/*.o # 忽略 src 目录下的所有 .o文件,但不影响其他目录
排除规则!
!用来排除.gitignore的忽略规则,即“不忽略这个文件”
*.c
!main.c
要注意递归问题,如果上层目录被忽略,子文件即使!排除,也无法追踪,必须用!*/先允许Git进入目录
示例:“白名单”
* # 忽略所有
!*/ # 不忽略子目录
!*.c # 不忽略.c文件
注释和空行
以#开头的行是注释,空行会被忽略,用于分组
优先级与执行顺序
.gitignore从上到下读取,后面的规则可以覆盖前面的规则
*.c # 忽略所有的.c文件
!main.c # 但是不要忽略 main.c
高级技巧
- 针对每个分支或环境可用不同规则
- 比如测试分支保留日志,生产分支忽略日志
- 用
.git/info/excluede做局部忽略,不影响仓库
- 动态生成ignore文件
- 可以通过脚本在项目初始化时生成
.gitignore
- 可以通过脚本在项目初始化时生成
- 已经被追踪的为念不会被忽略
- 如果文件已经加入版本控制,需要先
git rm --cached <file>,然后才会生效
- 如果文件已经加入版本控制,需要先
git rm --cached Library/ -r
git commmit -m "Remove ignored Library folder"
check-ignore
git check-ignore命令用于检查某个文件或目录是否被Git忽略,检查的依据是.gitignore、.git/info/excluede文件或全局gitignore文件中的规则。这个命令可以帮助你排查为什么某些文件没有被Git跟踪
git check-ignore -v <file path>
常用选项
-q --quit
不输出任何信息,仅设置退出状态。当之检查一个路径时使用此选项
- 退出状态
0:表示路径被忽略 - 退出状态
1:表示路径没有被忽略
-v, --verbose
输出匹配的排除规则及其源文件、行号和路径。如果路径与排除模式匹配,输出会包含该模式的具体信息;如果模式以!开头(表示否定模式),则意味着匹配后路径不被忽略
--stdin
从标准输入读取路径名,而不是从命令行读取。这对于检查多个文件很有用。路径名每行一个
-z
输出格式修改为机器可解析格式,路径名之间用NUL字符分隔,适用于机器处理
-n, --non-matching
显示没有匹配任何排除模式的路径。这仅在启用--verbose时才有意义,便于区分匹配和不匹配的路径
--no-index
在检查时不查看Git索引。这对调试某个路径为何被git add ,添加至跟踪状态,但没有被.gitignore忽略非常有用
退出状态
- 0:表示至少有一个路径被忽略
- 1:表示没有路径被忽略
- 128:遇到致命错误