当前位置: 首页 > article >正文

Git - .gitignore 文件

一、.gitignore 文件介绍

在使用 Git 进行版本控制时,.gitignore 文件是一个非常重要的配置文件,用于告诉 Git 哪些文件或目录不需要被追踪和提交到版本库中。合理使用 .gitignore 文件可以避免提交不必要的文件,如临时文件、编译生成的文件、日志文件、敏感信息等,从而保持版本库的整洁和高效。

使用 Git 的相信都经常看到这一个文件,当我们上传代码时候一些本地配置不想提交到线上的时候,我们一般都会有一个 .gitignore文件。

二、基本语法规则

.gitignore 文件使用简单的文本格式,每行定义一个忽略规则。

常见的语法规则如下:

  1. 注释:以 # 开头的行是注释,会被 Git 忽略。
# 这是一个注释,忽略所有 .log 文件
*.log
  1. 忽略文件 / 目录:直接指定文件名或目录名。
# 忽略单个文件
temp.txt# 忽略整个目录(包括子目录)
target/
  1. 通配符
    • *:匹配任意数量的任意字符(不包括路径分隔符 /
    • **:递归匹配任意目录
    • ?:匹配单个任意字符
    • []:匹配方括号内指定的任意一个字符
# 忽略所有 .tmp 文件
*.tmp# 忽略 build 目录下的所有 .class 文件
build/*.class# 递归忽略所有 node_modules 目录
**/node_modules/# 忽略所有以 test 开头的文件
test*# 忽略所有 .pdf 或 .docx 文件
*.pdf
*.docx
  1. 取反规则:以 ! 开头的规则表示不忽略(即使前面的规则已经忽略了该文件)。
# 忽略所有 .txt 文件,但不忽略 important.txt
*.txt
!important.txt
  1. 路径匹配
    • 没有斜杠:匹配当前目录及所有子目录中的文件
    • / 开头:只匹配仓库根目录下的文件
    • / 结尾:只匹配目录
# 只忽略根目录下的 config.ini
/config.ini# 忽略所有 src 目录下的 .swp 文件
src/*.swp# 忽略 doc 目录(无论在何处)
doc/

三、常用场景示例

以下是一些常见项目中可能需要添加到 .gitignore 的规则:

# 操作系统生成的文件
.DS_Store
Thumbs.db# 编译生成的文件
target/
build/
dist/
*.class
*.jar
*.pyc
*.o
*.a# 依赖缓存
node_modules/
vendor/
.gradle/# 日志文件
*.log
logs/# 配置文件(敏感信息)
config.local.json
secrets.properties# IDE/编辑器文件
.idea/
.vscode/
*.iml

四、全局忽略配置

除了在项目中使用 .gitignore 文件,还可以配置全局的忽略规则,这些规则将应用于所有 Git 仓库:

  1. 创建一个全局忽略文件(例如 ~/.gitignore_global):
touch ~/.gitignore_global
  1. 编辑该文件,添加你希望全局忽略的规则:
# 全局忽略 macOS 和 Windows 系统文件
.DS_Store
Thumbs.db# 全局忽略编辑器备份文件
*~
  1. 配置 Git 使用这个全局忽略文件:
git config --global core.excludesfile ~/.gitignore_global

五、强制添加被忽略的文件

如果需要强制添加某个被 .gitignore 忽略的文件,可以使用 -f 选项:

git add -f ignored_file.txt

六、刷新已忽略的文件

如果修改了 .gitignore 文件,需要刷新缓存以应用新的规则:

git rm -r --cached .  # 移除缓存
git add .             # 重新添加所有文件
git commit -m "Update .gitignore"  # 提交更改

七、总结

合理使用 .gitignore 文件是 Git 版本控制的重要实践,它可以帮助你:

  • 避免提交不必要的文件,保持版本库整洁
  • 保护敏感信息不被泄露
  • 提高团队协作效率
  • 减少冲突和错误
http://www.lryc.cn/news/2386957.html

相关文章:

  • MPI与多线程(如OpenMP)混合编程注意事项与性能优化
  • 计算机网络学习(八)——MAC
  • 英语六级-阅读篇
  • 右键打开 pycharm 右键 pycharm
  • 机器人坐标系标定
  • Flink流处理基础概论
  • 【RabbitMQ】记录 InvalidDefinitionException: Java 8 date/time type
  • 如何通过API接口实现自动化上货跨平台铺货?商品采集|商品上传实现详细步骤
  • 《三维点如何映射到图像像素?——相机投影模型详解》
  • Go 语言范围循环变量重用问题与 VSCode 调试解决方法
  • 青少年编程与数学 02-020 C#程序设计基础 04课题、常量和变量
  • 零基础设计模式——结构型模式 - 适配器模式
  • 【QT】TXT文件的基础操作
  • WordPress多语言插件安装与使用教程
  • 互联网大厂Java求职面试:短视频平台大规模实时互动系统架构设计
  • 欣佰特科技|SenseGlove Nova2 力反馈数据手套:助力外科手术训练的精准触觉模拟
  • Axure元件动作七:移动、旋转、启用/禁用效果、置于顶层/底层详解
  • 网络安全-等级保护(等保) 3-2-2 GB/T 28449-2019 第7章 现场测评活动/第8章 报告编制活动
  • Flutter跨平台通信实战|3步打通Android原生能力,实现底层API调用!
  • IAM角色访问AWS RDS For MySQL
  • android property 系统
  • Karakeep | 支持Docker/NAS 私有化部署!稍后阅读工具告别云端依赖,让知识收藏更有序
  • RV1126+FFMPEG多路码流监控项目大体讲解
  • el-dialog 组件 多层嵌套 被遮罩问题
  • 探秘谷歌Gemini:开启人工智能新纪元
  • TCP建立连接为什么不是两次握手,而是三次,为什么不能在第二次握手时就建立连接?
  • 《Stable Diffusion 3.0企业级落地指南》——技术赋能与商业价值的深度融合实践
  • 【软考向】Chapter 3 数据结构
  • [原创](计算机数学)(The Probability Lifesaver)(P14): 推导计算 In(1-u) 约等于 -u
  • wordcount在集群上的测试