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

.gitignore使用指南

.gitignore使用指南

目录

  • 什么是.gitignore
  • 为什么需要.gitignore
  • 如何创建.gitignore文件
  • .gitignore文件的语法规则
    • 忽略单个文件
    • 忽略目录
    • 忽略特定类型的文件
    • 不忽略特定文件或目录
    • 递归匹配
  • 示例.gitignore文件
  • 注意事项
  • 更多特殊场景匹配规则
    • 忽略多个特定后缀的文件
    • 忽略特定目录下的所有隐藏文件
  • 跨平台使用差异
    • 路径分隔符差异
    • 大小写敏感性差异
    • 忽略特定前缀的文件
    • 忽略特定后缀的文件
  • 与其他工具集成
    • 与IDE集成
    • 与持续集成工具集成
  • 更复杂的匹配规则
    • 忽略特定目录下的特定文件
    • 忽略特定目录下的所有文件
  • 不同项目类型的最佳实践
    • Python项目
    • Java项目
    • JavaScript项目
    • Go项目
    • C++项目
    • 更复杂的匹配规则
      • 忽略特定目录下特定后缀的文件
      • 忽略特定目录下特定前缀的文件
      • 忽略特定目录下特定后缀和前缀的文件

什么是.gitignore

.gitignore 是一个文本文件,用于告诉Git哪些文件或目录在版本控制中应该被忽略。当你执行 git add 命令时,Git会参考 .gitignore 文件的内容,不会将其中指定的文件添加到暂存区。

为什么需要.gitignore

在项目开发过程中,有些文件是不需要进行版本控制的,例如:

  • 编译生成的文件:如 .class.pyc 等。
  • 日志文件:如 .log 文件。
  • 临时文件:如 .tmp 文件。
  • 依赖文件:如 node_modules 目录。

使用 .gitignore 可以避免将这些文件添加到版本库中,减少版本库的大小,同时也可以避免不必要的文件冲突。

如何创建.gitignore文件

在项目根目录下创建一个名为 .gitignore 的文件,可以使用以下命令:

 touch .gitignore

.gitignore文件的语法规则

忽略单个文件

要忽略单个文件,只需在 .gitignore 文件中写入该文件的名称,例如:

 test.txt

这将忽略项目根目录下的 test.txt 文件。

忽略目录

要忽略整个目录,在目录名称后面加上斜杠 /,例如:

 logs/

这将忽略项目根目录下的 logs 目录及其所有子目录和文件。

忽略特定类型的文件

可以使用通配符 * 来忽略特定类型的文件,例如:

 *.log

这将忽略所有以 .log 结尾的文件。

不忽略特定文件或目录

如果你想在忽略某个目录的同时,不忽略其中的某个文件或子目录,可以使用 ! 符号,例如:

 logs/
!logs/important.log

这将忽略 logs 目录下的所有文件,但不忽略 logs/important.log 文件。

递归匹配

使用 ** 可以进行递归匹配,例如:

 **/*.log

这将忽略项目中所有目录下的 .log 文件。

示例 .gitignore 文件

以下是一个常见的 .gitignore 文件示例,适用于Python项目:

 # Byte-compiled / optimized / DLL files__pycache__/*.pyc*.pyo*.pyd# C extensions*.so# Distribution / packagingdist/build/*.egg-info/# Logs and databases*.log*.sql*.sqlite# IDEs and editors.idea/.vscode/*.iml

注意事项

  • .gitignore 文件只对未被跟踪的文件有效:如果一个文件已经被Git跟踪,即使在 .gitignore 文件中添加了该文件,Git仍然会继续跟踪它。如果你想忽略已经被跟踪的文件,可以使用 git rm --cached 命令将其从版本库中移除。
  • .gitignore 文件的位置.gitignore 文件通常放在项目根目录下,但也可以在子目录中创建 .gitignore 文件,子目录中的 .gitignore 文件只对该子目录及其子目录有效。
  • .gitignore 文件的优先级:子目录中的 .gitignore 文件会覆盖父目录中的 .gitignore 文件。

更多特殊场景匹配规则

忽略多个特定后缀的文件

可以使用 | 结合正则表达式来忽略多个特定后缀的文件,需要在 .gitignore 文件中使用正则表达式模式,同时要确保 Git 支持正则表达式模式匹配。例如:

*.(log|tmp|bak)

这将忽略所有以 .log.tmp.bak 结尾的文件。

忽略特定目录下的所有隐藏文件

可以使用 / 结合特定目录和隐藏文件的前缀 . 来忽略特定目录下的所有隐藏文件,例如:

/logs/.*

这将忽略 logs 目录下的所有隐藏文件。

跨平台使用差异

路径分隔符差异

在 Windows 系统中,路径分隔符是反斜杠 \,而在 Linux 和 macOS 系统中,路径分隔符是正斜杠 /。在 .gitignore 文件中,应该始终使用正斜杠 / 作为路径分隔符,因为 Git 会自动处理不同系统的路径分隔符差异。例如:

logs/

无论是在 Windows、Linux 还是 macOS 系统中,这个规则都会正确忽略 logs 目录。

大小写敏感性差异

在 Windows 和 macOS 系统中,文件系统默认是大小写不敏感的,而在 Linux 系统中,文件系统默认是大小写敏感的。这意味着在 .gitignore 文件中,大小写的匹配规则可能会有所不同。例如:

Test.txt

在 Windows 和 macOS 系统中,这个规则会忽略 Test.txttest.txt 等文件,而在 Linux 系统中,只会忽略 Test.txt 文件。如果需要在不同系统中保持一致的匹配规则,建议在 .gitignore 文件中使用一致的大小写。

忽略特定前缀的文件

可以使用 * 结合特定前缀来忽略以特定字符串开头的文件,例如:

prefix_*

这将忽略所有以 prefix_ 开头的文件。

忽略特定后缀的文件

除了使用 * 忽略特定后缀的文件,还可以使用 ? 来匹配单个字符,例如:

*.log?

这将忽略所有以 .log 开头,后面跟一个任意字符的文件。

与其他工具集成

与IDE集成

许多集成开发环境(IDE)可以自动识别 .gitignore 文件,并在文件浏览和搜索中排除被忽略的文件。例如,在IntelliJ IDEA中,被 .gitignore 文件忽略的文件会以灰色显示,并且不会出现在项目搜索结果中。

与持续集成工具集成

在持续集成(CI)环境中,.gitignore 文件可以帮助排除不必要的文件,减少构建时间和资源消耗。例如,在Jenkins或GitLab CI/CD中,构建过程会自动遵循 .gitignore 文件的规则,只处理需要的文件。

更复杂的匹配规则

忽略特定目录下的特定文件

可以使用 / 结合特定目录和文件名来忽略特定目录下的特定文件,例如:

/logs/*.log

这将忽略 logs 目录下的所有 .log 文件。

忽略特定目录下的所有文件

可以使用 / 结合特定目录来忽略特定目录下的所有文件,例如:

/logs/

这将忽略 logs 目录下的所有文件。

不同项目类型的最佳实践

Python项目

# Byte-compiled / optimized / DLL files
__pycache__/
*.pyc
*.pyo
*.pyd# C extensions
*.so# Distribution / packaging
/dist/
/build/
*.egg-info/# Logs and databases
*.log
*.sql
*.sqlite# IDEs and editors
.idea/
.vscode/
*.iml

Java项目

# Compiled class file
*.class# Log file
*.log# BlueJ files
*.ctxt# Mobile Tools for Java (J2ME)
.mtj.tmp/# Package Files #
*.jar
*.war
*.nar
*.ear
*.zip
*.tar.gz
*.rar# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
hs_err_pid*

JavaScript项目

# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
nyan-debug.log*# Runtime data
pids
*.pid
*.seed
*.pid.lock# Directory for instrumented libs generated by jscoverage/JSCover
lib-cov# Coverage directory used by tools like istanbul
coverage# nyc test coverage
.nyc_output# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
.grunt# Bower dependency directory (https://bower.io/)
bower_components# node-waf configuration
.lock-wscript# Compiled binary addons (http://nodejs.org/api/addons.html)
build/Release# Dependency directories
node_modules/
jspm_packages/# TypeScript v1 declaration files
typings/# TypeScript cache
.tscache

Go项目

# Binaries for programs and plugins
*.exe
*.exe~ 
*.dll
*.so
*.dylib# Test binary, built with "go test -c"
*.test# Output of the go coverage tool, specifically when used with LiteIDE
*.out

C++项目

# Compiled Object files
*.slo
*.lo
*.o
*.obj# Precompiled Headers
*.gch
*.pch# Compiled Dynamic libraries
*.so
*.dylib
*.dll# Fortran module files
*.mod
*.smod# Executables
* 

更复杂的匹配规则

忽略特定目录下特定后缀的文件

可以使用 / 结合特定目录和后缀来忽略特定目录下特定后缀的文件,例如:

/logs/*.log

这将忽略 logs 目录下的所有 .log 文件。

忽略特定目录下特定前缀的文件

可以使用 / 结合特定目录和前缀来忽略特定目录下特定前缀的文件,例如:

/logs/prefix_*

这将忽略 logs 目录下所有以 prefix_ 开头的文件。

忽略特定目录下特定后缀和前缀的文件

可以使用 / 结合特定目录、前缀和后缀来忽略特定目录下特定后缀和前缀的文件,例如:

/logs/prefix_*.log

这将忽略 logs 目录下所有以 prefix_ 开头且以 .log 结尾的文件。

以上就是 .gitignore 文件的基本使用指南以及更多特殊匹配规则和不同项目类型的最佳实践等内容,希望对你有所帮助。

相关文章:

.gitignore使用指南

.gitignore使用指南 目录 什么是.gitignore为什么需要.gitignore如何创建.gitignore文件.gitignore文件的语法规则 忽略单个文件忽略目录忽略特定类型的文件不忽略特定文件或目录递归匹配 示例.gitignore文件注意事项更多特殊场景匹配规则 忽略多个特定后缀的文件忽略特定目录…...

Excel多级联动下拉菜单的自动化设置(使用Python中的openpyxl模块)

1 主要目的 在Excel中,经常会遇到需要制作多级联动下拉菜单的情况,要求单元格内填写的内容只能从指定的多个选项中进行选择,并且需要设置多级目录,其中下级目录的选项内容要根据上级目录的填写内容确定,如下图所示&am…...

深入解析 Spring Framework 5.1.8.RELEASE 的源码目录结构

深入解析 Spring Framework 5.1.8.RELEASE 的源码目录结构 1. 引言 Spring Framework 是 Java 领域最流行的企业级开发框架之一,广泛用于 Web 开发、微服务架构、数据访问等场景。本文将深入解析 Spring Framework 5.1.8.RELEASE 的源码目录结构,帮助开…...

excalidraw画图工具——背景画布有无格子设置

服啦找了大半天,愣是没找到 toggle grid : 切换格子… Excalidraw的背景格子 只要右键,将这个勾取消就好了?...

计算机组成原理———I\O系统精讲<1>

本篇文章主要介绍输入输出系统的发展概况 一.输入输出系统的发展概况 1.早期阶段 该阶段的特点是I/O设备与主存交换信息都必须通过CPU 当时的I/O设备有如下几个特点: (1)每个I\O设备都必须配有一套独立的逻辑电路与CPU相连,用来…...

[数据结构] 动态顺序表应用

可扩容顺序表顺序表 SeqList.hSeqList.cTest.c 动态顺序表能够根据数据存储的需要动态地管理内存空间。 SeqList.h #include<stdio.h> #include<stdlib.h>//静态顺序表 //小了不够用&#xff0c;多了浪费 //#define N 10 //typedef int SLDatatype; //struct SeqL…...

MinIO-对象存储方案

MinIO 是一个基于Apache License v2.0开源协议的对象存储服务。它兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小,从几kb到最大5T不等。 MinIO是一个非常轻量的服务…...

装饰器模式 (Decorator Pattern)

装饰器模式 (Decorator Pattern) 是一种结构型设计模式,它动态地给一个对象添加一些额外的职责,就增加功能来说,装饰器模式相比生成子类更为灵活。 一、基础 1 意图 动态地给一个对象添加一些额外的职责。 就增加功能来说,装饰器模式相比生成子类更为灵活。 2 适用场景 当…...

手动配置树莓派wifi联网连接热点手机热点

手动配置树莓派wifi联网连接热点 修改wifi配置文件: 运行命令: sudo nano /etc/wpa_supplicant/wpa_supplicant.conf 在文件中添加无线网配置信息: ctrl_interfaceDIR/var/run/wpa_supplicant GROUPnetdev update_config1 countryCN network{ ssid”你的无线网名字” psk”…...

【学习笔记】麦肯锡《超级智能体:赋能人们释放人工智能的全部潜力》

麦肯锡《超级智能体&#xff1a;赋能人们释放人工智能的全部潜力》报告的学习笔记&#xff1a; 报告背景与意义 • 科技发展趋势&#xff1a;随着人工智能技术的飞速发展&#xff0c;其在各行业的应用逐渐深入&#xff0c;麦肯锡的这份报告正是基于这一背景&#xff0c;旨在深入…...

ENSP学习day9

ACL访问控制列表实验 ACL&#xff08;Access Control List&#xff0c;访问控制列表&#xff09;是一种用于控制用户或系统对资源&#xff08;如文件、文件夹、网络等&#xff09;访问权限的机制。通过ACL&#xff0c;系统管理员可以定义哪些用户或系统可以访问特定资源&#x…...

文章记单词 | 第2篇(六级)

一&#xff0c;单词释义 story&#xff1a;名词&#xff08;n.&#xff09;故事&#xff1b;小说&#xff1b;&#xff08;真实情况的&#xff09;叙述&#xff0c;描述&#xff1b;楼层&#xff08;美语写法&#xff0c;英式英语为 storey&#xff09;stress&#xff1a;名词…...

【C++动态规划 数学】1039. 多边形三角剖分的最低得分|2130

本文涉及知识点 C动态规划 数学 LeetCode1039. 多边形三角剖分的最低得分 你有一个凸的 n 边形&#xff0c;其每个顶点都有一个整数值。给定一个整数数组 values &#xff0c;其中 values[i] 是第 i 个顶点的值&#xff08;即 顺时针顺序 &#xff09;。 假设将多边形 剖分 …...

5.go切片和map

切片的概念 数组和切片相比较切片的长度是不固定的&#xff0c;可以追加元素&#xff0c;在追加时可能会使切片的容量增大&#xff0c;所以可以将切片理解成 "动态数组"&#xff0c;但是&#xff0c;它不是数组&#xff0c;而是构建在数组基础上的更高级的数据结构。…...

【Linux网络-多路转接select】

代码&#xff1a;https://gitee.com/nanyi-c/linux/tree/master/day50 一、I/O多路转接之select 1.初始select 系统提供select函数来实现多路复用输入/输出模型 select系统调用是用来让我们的程序监视多个文件描述符的状态变化的程序会停在select这里等待&#xff0c;直到被…...

cmd命令查看电脑的CPU、内存、存储量

目录 获取计算机硬件的相关信息的命令分别的功能结果展示结果说明获取计算机硬件的相关信息的命令 wmic cpu get name wmic memorychip get capacity wmic diskdrive get model,size,mediaType分别的功能 获取计算机中央处理器(CPU)的名称 获取计算机内存(RAM)芯片的容量…...

LVS的 NAT 模式实现 3 台RS的轮询访问

使用LVS的 NAT 模式实现 3 台RS的轮询访问 1.配置 RS&#xff08;NAT模式&#xff09;2. 配置 LVS 主机&#xff08;仅主机、NAT模式&#xff09;2.1 配置仅主机网卡&#xff08;192.168.66.150/24 VIP &#xff09;2.2 配置 NAT 网卡&#xff08;192.168.88.6/24 DIP&#xff…...

phpcms版AI自动发文插件,自动创作,自动配图,自动发布,支持多种大模型

phpcms版本的AI自动发文插件1.0.0版&#xff0c;支持自动写文章&#xff0c;自动配图&#xff0c;自动发布。目前支持DeepSeek&#xff0c;豆包&#xff0c;通义千问&#xff0c;文心一言&#xff0c;讯飞星火&#xff0c;KIMI&#xff0c;腾讯混元登大模型AI。同时有自定义字段…...

C语言判断闰年相关问题

一、简单闰年问题引入 写一个判断年份是否为闰年的程序? 运行结果: 二、闰年问题进阶 使用switch语句根据用户输入的年份和月份,判断该月份有多少天? 第一种写法(判断年份写在switch的case的里面): 运行结果: 第二种解法(先判断闰年): 运行结果: 三、补充 switch中的ca…...

团体协作项目总结Git

使用Git开放时候发现本地, 有些代码并没有被拉取到本地仓库, 又不想再commit一次, 这时候我就想到了 git commit --amend 合并提交 git commit --amend 修改git提交记录用法详解 可以将本次提交记录合并到上一次合并提交 git commit --amendgit rebase -i master^^ // 假设我…...

solana/web3.js 2.0:Solana 转账全流程解析

Solana 区块链以高吞吐量和低交易成本&#xff0c;已成为开发者的热门选择。而 solana /web3.js 2.0 作为最新一代 JavaScript 库&#xff0c;为与 Solana 网络交互提供了更高效、模块化的工具。本文将深入剖析如何使用 solana /web3.js 2.0 实现 Solana 区块链上的转账操作&am…...

数模转换电路(D/A转换器)

将数字信号转换成模拟信号称为数/模转换, 简称D/A&#xff08;Digital to Analog&#xff09;转换&#xff0c;实现 D/A 转换的器件称为D/A转换器&#xff0c;简称 DAC&#xff08;Digital-Analog Converter&#xff09;。 将模拟信号转换成数字信号称为模/数转换, 简称A/D&a…...

网络基础-路由器和交换机工作配置

三、路由器和交换机的工作原理配置以及华为体系下的小型网络的搭建 3.1路由基础 3.1.1数据转发 通过链路层交换机和网络层路由器进行数据转发 交换机&#xff08;链路层&#xff09;mac地址表的数据转发路由器&#xff08;网络层&#xff09; ip路由表的数据转发 隔离广播域…...

uv包简单使用案例

uv由Charlie Marsh开发&#xff0c;是Astral Tool的一个快速Python包安装器和解析器。它类似于pip和pip-tools&#xff0c;但速度更快。此外&#xff0c;uv还支持虚拟环境管理&#xff0c;替代venv和virtualenv。 参考&#xff1a;https://github.com/astral-sh/uv 安装&#x…...

PHP接口开发:从基础到高级的全面指南

一、接口基础与核心概念(约800字) 1.1 接口的本质定义 在PHP中,接口(Interface)是一种特殊的抽象结构,它通过interface关键字定义一组方法的契约规范,不包含具体实现。这种设计强制实现类必须遵循统一的调用标准,如: interface PaymentGateway {public function proc…...

JAVA学习*String类

String类 基本知识 String类的构造方法 String类的构造方法有很多&#xff0c;我们需要掌握常见的构造方法&#xff0c;来赋初识值。 1、new一个String类的对象 String name new String("张三");2、使用字符串常量进行赋值 String name "张三";相当…...

Java IO框架体系深度解析:从四基类到设计模式实践

Java IO框架体系深度解析&#xff1a;从四基类到设计模式实践 一、IO流体系架构总览 1.1 四基类设计哲学 Java IO框架以InputStream、OutputStream、Reader、Writer四个抽象类为根基&#xff0c;构建了完整的流式IO体系。这种设计体现了以下核心原则&#xff1a; 抽象分层&a…...

【读书笔记】华为《从偶然到必然》

note 华为的成功并非偶然&#xff0c;而是通过IPD体系、投资组合管理、平台战略等系统性工具&#xff0c;将研发投资转化为可持续的商业竞争力。书中强调的“管理即内部因素”理念&#xff0c;揭示了企业规模扩张与管理能力匹配的深层规律&#xff0c;为高科技企业提供了可借鉴…...

failed to load steamui.dll”错误:Steam用户的高频崩溃问题解析

当你满心欢喜地双击 Steam 图标&#xff0c;准备进入游戏世界时&#xff0c;屏幕上突然弹出 “failed to load steamui.dll” 的刺眼提示——这是全球数百万 Steam 用户最不愿见到的错误之一。作为 Steam 客户端的核心界面动态链接库文件&#xff0c;steamui.dll 的缺失或损坏会…...

Linux多线程详解

Linux多线程详解 一、Linux多线程概念1.1 什么是线程1.2 进程和线程1.3 进程的多个线程共享1.4 进程和线程的关系 二、Linux线程控制2.1 POSIX线程库2.2 线程创建2.3 获取线程ID pthread_self2.4 线程等待pthread_join2.5 线程终止2.6 线程栈 && pthread_t2.7 线程的局…...