.gitignore使用指南

news/2025/3/26 22:07:32/

.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 文件的基本使用指南以及更多特殊匹配规则和不同项目类型的最佳实践等内容,希望对你有所帮助。


http://www.ppmy.cn/news/1582937.html

相关文章

PHP If...Else 语句详解

PHP If...Else 语句详解 引言 PHP 是一种流行的服务器端脚本语言,常用于开发动态网站和应用程序。在 PHP 编程中,条件语句是编程逻辑的基础,其中 if...else 语句是最基本且最常用的条件语句之一。本文将详细介绍 PHP 的 if...else 语句&…

Spring6: 2 入门

2、 入门 2.1 环境要求 JDK:Java17(Spring6要求JDK最低版本是Java17) Maven:3.6 Spring:6.0.2 2.2、构建模块 1)构建父模块spring6 在idea中,依次单击 File -> New -> Project -&g…

深入解析:Nginx+Keepalived实现双机热备架构

全文目录: 开篇语前言摘要概述什么是双机热备?为什么选择 Nginx Keepalived?本文目标 架构设计与原理架构示意图工作原理 环境准备系统与软件环境基础网络配置 实战:Nginx Keepalived 双机热备配置第一步:安装 Nginx…

特殊行车记录仪DAT视频丢失的恢复方法

行车记录仪是一种常见的车载记录仪,和常见的“小巧玲珑”的行车记录仪不同,一些特种车辆使用的记录仪的外观可以用“笨重”来形容。下边我们来看看特种车载行车记录仪删除文件后的恢复方法。 故障存储: 120GB存储设备/文件系统:exFAT /簇大小:128KB 故…

隔空打印,IPP,IPD,HP Jetdirect协议的区别(Mac添加打印机四种协议的区别)

‌隔空打印‌:隔空打印是一种通过Wi-Fi、USB和以太网络访问打印机的协议。使用隔空打印协议,用户可以无需下载或安装打印机软件即可使用支持该协议的打印机。支持隔空打印的打印机品牌包括Aurora、Brother、Canon、Dell、Epson、Fuji、Hewlett Packard、…

嵌入式八股,为什么单片机中不使用malloc函数

1. 资源限制 单片机的内存资源通常非常有限,尤其是RAM的大小可能只有几KB到几十KB。在这种情况下,使用 malloc 进行动态内存分配可能会导致内存碎片化,使得程序在运行过程中逐渐耗尽可用内存。 2. 内存碎片问题 malloc 函数在分配和释放内…

leetcode-回文类题-647-求字符串中 回文子串 的数目

1、回文子串-647 题目: 给你一个字符串 s ,请你统计并返回这个字符串中 回文子串 的数目。 回文字符串 是正着读和倒过来读一样的字符串。 子字符串 是字符串中的由连续字符组成的一个序列。 示例 1: 输入:s "abc"…

26考研——图_图的基本概念(6)

408答疑 文章目录 一、图的基本概念图的定义非空性非线性结构 顶点和边的表示顶点边 有向图 & 无向图有向图有向图 G 1 G_1 G1​ 的表示 无向图无向图 G 2 G_2 G2​ 的表示 简单图 & 多重图简单图多重图 顶点的度、入度和出度顶点的度有向图的度 路径、路径长度和回路…