Git文件.gitignore和.gitkeep用法解析

本文涉及的产品
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
简介: Git文件.gitignore和.gitkeep用法解析
  • .gitignore:告诉 git 管理工具,需要忽略那些不需要被跟踪的文件或目录
  • .gitkeep:无意义,起到占位符的作用,git 在进行版本管理时,不会主动跟踪空目录,所以当项目中存在空目录的时候,git 会忽略空目录,如果需要将空目录上传到git仓库,一般需要在空目录下创建一个 .gitkeep 空文件起到占位的作用。在创建占位文件时,无意义的文件都是可以的,.gitkeep 文件只是一种约定俗成的规范名称而已。

.gitignore

.gitignore工作原理

在有的项目中,并不是所有的文件都需要上传到Git仓库进行版本管理的,这时我们就需要在项目中添加一个 .gitignore 文件告诉 git 那些文件或目录不需要被跟踪。

.gitignore 文件一般放在项目的根目录下对整个项目的文件进行匹配。也可以放到其他目录下,此时 .gitignore 文件以当前所在的路径为根路径进行模式匹配。

在创建 .gitignore 文件之前,假如已经把一些需要忽略文件添加到 git 版本管理中,那么即使我们在 .gitignore 文件中添加了这些文件的匹配规则,此时 git 不会匹配这些规则,对添加的文件进行过滤,因为此时这些文件已经被 git 进行管理了。所以在项目创建开始时就需要养成创建 .gitignore 的习惯。

.gitignore常用匹配规则

  • #:注释
  • \:转义符,使具有特殊意义的字符标识为普通字符
  • !:否定前缀,表示不忽略(跟踪)指定路径,可以将之前排除过滤的匹配文件再次包含进来。git 默认是对空目录不进行跟踪,可以使用 ! 前缀用来管理跟踪空目录,不过跟推荐使用 .gitkeep 占位文件来跟踪管理空目录。
  • /:目录分隔符
    • /位于开头或中间:匹配相对于 .gitignore的相对路径
      • /folder1/file1:匹配相对于 .gitignore 所在路径根目录下单的 /folder1/file1 文件
      • subfolder1/file1:匹配相对于 .gitignore 所在路径的 subfolder1/file1 文件,无论是根目录还是某个子目录下的 subfolder1/file1
    • /位于结尾:只匹配目录,否则同时匹配目录和文件。
  • *:通配多个字符,只能匹配到指定路径下的目录或文件,不能匹配子目录的内容。
    • /folder1/*
      • 仅能匹配到 /folder1/file1...,/folder1/subfolder1/...等文件
      • 不能匹配到 /folder1/subfolder1/file1...等文件
  • **:特殊匹配符,表示匹配所有目录:
    • **/subfolder1:匹配任意路径下的文件或目录 subfolder1,类似于 subfolder1
    • folder1/**/file1:匹配 folder1/file1, folder1/subfolder1/file1, folder1/subfolder1/subsubfolder1/file1等文件或目录
    • /flolder1/**:匹配 /flolder1 路径下所有文件和目录。
  • ?:通配单个字符匹配除了/之外的任意单个字符
  • []:范围匹配,匹配[] 指定范围内的任意单个字符

本地 .gitignore 规则

远程代码仓库的 .gitignore 文件一般匹配项目中需要过滤的文件。但在实际开发中,项目组的各个成员有可能使用的IDE、编译器,开发环境等的不同,可能会导致每一个人都可能在自己本地需要一套额外的匹配过滤规则,但这套匹配过滤规则是与自己本地绑定的,而不应该上传到远程仓库。

本地代码库 .gitignore 规则

可以将自己本地的,不需要上传到仓库的 .gitignore 匹配规则写入在 .git/info/exclude 文件中

全局 .gitignore 规则

全局 .gitignore 对本地的所有项目都生效

创建全局 .gitignore 文件来进行全局 .gitignore 匹配

git config --global core.excludesfile {
  {file_path}}

一般情况下,推荐将全局 .gitignore 文件放在用户 ~ 目录下,也命名为 .gitignore 文件名,具体可根据实际需要进行修改。
添加全局匹配规则时,到指定文件添加匹配规则即可。

修改 .gitconfig 来进行全局 .gitignore 匹配

.gitconfig 文件一般在用户 ~ 目录下,若无此文件,创建空文件即可。

.gitconfig中写入:

[core]
    excludesfile = {
  {file_path}}

通过修改配置文件配置全局 .gitignore 规则,不会自动创建指定文件,需要在指定路径下创建对应的文件。

那些文件需要被过滤

  • 日志文件
  • 缓存或临时文件
  • 具有敏感信息的文件,如密码,密钥,身份信息等
  • 编译文件,如 .class.o
  • 依赖目录,如 /venv, /node_modules
  • 编译输出文件,如 /dist, /public
  • 系统文件,如 .DS_Store
  • 项目目录下的压缩打包文件,如 .zip, .tar.gz
  • IDE或文本编译器的配置文件,如 .idea/, __pycache__
  • 大量数据集

有的人在使用 git 时,会将项目打包文件或项目依赖的数据集等大文件放在 git 中来进行版本管理,这样做是不对的,在使用 git 时,应满足:

  • 禁止push提交大文件
  • 少量多次commit

.gitkeep

git 版本管理一般不会跟踪空目录,所以在上传到远程仓库时,会发现所有的空目录都不存在。但有的空目录是保持目录结构和进行未来扩展的必要目录,所以也需要将这些空目录上传到远程仓库中。

根据 .gitignore 中的匹配规则可知,我们可以使用 ! 来指定相应的目录进行跟踪来上传远程目录,但在 .gitignore 中来指定空目录跟踪,既不方便也有可能造成歧义。所以不推荐使用本方法。

我们可以在空目录下创建空白的占位文件,这样该目录就不再是空目录的,git 也会进行相应的跟踪管理。理论上,无意义的占位文件都是可以的,开发人员一般使用 .gitkeep 作为空目录的占位文件,仅仅是一种约定俗成的规范。在实际项目中,可以根据项目组的要求使用指定的占位文件,若无要求,推荐使用 .gitkeep 保持良好的规范。

相关文章
|
4天前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
16 2
|
1月前
|
自然语言处理 数据处理 Python
python操作和解析ppt文件 | python小知识
本文将带你从零开始,了解PPT解析的工具、工作原理以及常用的基本操作,并提供具体的代码示例和必要的说明【10月更文挑战第4天】
309 60
|
10天前
|
存储
文件太大不能拷贝到U盘怎么办?实用解决方案全解析
当我们试图将一个大文件拷贝到U盘时,却突然跳出提示“对于目标文件系统目标文件过大”。这种情况让人感到迷茫,尤其是在急需备份或传输数据的时候。那么,文件太大为什么会无法拷贝到U盘?又该如何解决?本文将详细分析这背后的原因,并提供几个实用的方法,帮助你顺利将文件传输到U盘。
|
18天前
|
Dart 安全 编译器
Flutter结合鸿蒙next 中数据类型转换的高级用法:dynamic 类型与其他类型的转换解析
在 Flutter 开发中,`dynamic` 类型提供了灵活性,但也带来了类型安全性问题。本文深入探讨 `dynamic` 类型及其与其他类型的转换,介绍如何使用 `as` 关键字、`is` 操作符和 `whereType<T>()` 方法进行类型转换,并提供最佳实践,包括避免过度使用 `dynamic`、使用 Null Safety 和异常处理,帮助开发者提高代码的可读性和可维护性。
69 1
|
29天前
|
数据安全/隐私保护 流计算 开发者
python知识点100篇系列(18)-解析m3u8文件的下载视频
【10月更文挑战第6天】m3u8是苹果公司推出的一种视频播放标准,采用UTF-8编码,主要用于记录视频的网络地址。HLS(Http Live Streaming)是苹果公司提出的一种基于HTTP的流媒体传输协议,通过m3u8索引文件按序访问ts文件,实现音视频播放。本文介绍了如何通过浏览器找到m3u8文件,解析m3u8文件获取ts文件地址,下载ts文件并解密(如有必要),最后使用ffmpeg合并ts文件为mp4文件。
|
1月前
|
前端开发 JavaScript UED
axios取消请求CancelToken的原理解析及用法示例
axios取消请求CancelToken的原理解析及用法示例
89 0
|
1月前
|
缓存 Java 程序员
Map - LinkedHashSet&Map源码解析
Map - LinkedHashSet&Map源码解析
67 0
|
1月前
|
算法 Java 容器
Map - HashSet & HashMap 源码解析
Map - HashSet & HashMap 源码解析
52 0
|
1月前
|
存储 Java C++
Collection-PriorityQueue源码解析
Collection-PriorityQueue源码解析
60 0
|
1月前
|
安全 Java 程序员
Collection-Stack&Queue源码解析
Collection-Stack&Queue源码解析
80 0

推荐镜像

更多