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

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 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 保持良好的规范。

相关文章
|
3月前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
130 2
|
15天前
|
开发工具 git 索引
怎么取消对project.private.config.json这个文件的git记录
通过以上步骤,您可以成功取消对 `project.private.config.json`文件的Git记录。这样,文件将不会被包含在未来的提交中,同时仍保留在您的工作区中。
56 28
|
2月前
|
人工智能 自然语言处理 Java
FastExcel:开源的 JAVA 解析 Excel 工具,集成 AI 通过自然语言处理 Excel 文件,完全兼容 EasyExcel
FastExcel 是一款基于 Java 的高性能 Excel 处理工具,专注于优化大规模数据处理,提供简洁易用的 API 和流式操作能力,支持从 EasyExcel 无缝迁移。
218 9
FastExcel:开源的 JAVA 解析 Excel 工具,集成 AI 通过自然语言处理 Excel 文件,完全兼容 EasyExcel
|
1月前
|
Serverless 对象存储 人工智能
智能文件解析:体验阿里云多模态信息提取解决方案
在当今数据驱动的时代,信息的获取和处理效率直接影响着企业决策的速度和质量。然而,面对日益多样化的文件格式(文本、图像、音频、视频),传统的处理方法显然已经无法满足需求。
93 4
智能文件解析:体验阿里云多模态信息提取解决方案
|
28天前
|
前端开发 Java 开发工具
Git使用教程-将idea本地Java等文件配置到gitte上【保姆级教程】
本内容详细介绍了使用Git进行版本控制的全过程,涵盖从本地仓库创建到远程仓库配置,以及最终推送代码至远程仓库的步骤。
36 0
|
3月前
|
消息中间件 存储 Java
RocketMQ文件刷盘机制深度解析与Java模拟实现
【11月更文挑战第22天】在现代分布式系统中,消息队列(Message Queue, MQ)作为一种重要的中间件,扮演着连接不同服务、实现异步通信和消息解耦的关键角色。Apache RocketMQ作为一款高性能的分布式消息中间件,广泛应用于实时数据流处理、日志流处理等场景。为了保证消息的可靠性,RocketMQ引入了一种称为“刷盘”的机制,将消息从内存写入到磁盘中,确保消息持久化。本文将从底层原理、业务场景、概念、功能点等方面深入解析RocketMQ的文件刷盘机制,并使用Java模拟实现类似的功能。
72 3
|
3月前
|
存储
文件太大不能拷贝到U盘怎么办?实用解决方案全解析
当我们试图将一个大文件拷贝到U盘时,却突然跳出提示“对于目标文件系统目标文件过大”。这种情况让人感到迷茫,尤其是在急需备份或传输数据的时候。那么,文件太大为什么会无法拷贝到U盘?又该如何解决?本文将详细分析这背后的原因,并提供几个实用的方法,帮助你顺利将文件传输到U盘。
|
Linux 开发工具 git
Git用法初探
前提 之前一直在用svn和cvs,感觉跟不上时代的潮流了,加上git优点多多,所以就抽出时间进行了git基本的学习,一是怕自己忘记了,另外一个希望可以帮助到新手,避免走弯路,如有不对的地方还望指正。
1090 0
|
3月前
|
开发工具 git
git 常用命令
这些只是 Git 命令的一部分,Git 还有许多其他命令和选项,可根据具体需求进行深入学习和使用。熟练掌握这些命令能够帮助你更高效地管理代码版本和协作开发。
|
25天前
|
网络安全 开发工具 git
mac git clone命令提示git@gitee.com: Permission denied (publickey).问题修复
mac git clone命令拉取gitee上项目代码时提示密钥问题

推荐镜像

更多