当前位置: 首页 > 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 / packaging
 dist/
 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.kler.cn/a/598218.html

相关文章:

  • 管家婆工贸ERP PR004.委外完工验收明细表
  • 第十一章 | 智能合约主网部署与验证详解
  • Qt窗口控件之工具栏QToolBar
  • MCU vs SoC
  • 动态查找表
  • Can Large Language Models be Anomaly Detectors for Time Series? 解读
  • 英伟达黄仁勋2025GTC演讲深度解析:液冷GPU、AI工厂、机器人AI…...
  • 安铂克科技APMQS20高性能模块级射频/微波信号发生器 信号源模块
  • DooTask在Linux的离线部署教程
  • JSON基础概念介绍+策划配置数据与JSON应用
  • IntelliJ IDEA 常用快捷键大全(Windows 版)
  • 蓝桥杯嵌入式备赛记录—CubeMX配置
  • 第十九章:实现 Traits_《C++ Templates》notes
  • 持续集成与持续交付:这里有从开发到部署的全流程优化
  • iOS:GCD信号量、同步、异步的使用方法
  • 字节、清华AIR开源DAPO——学习笔记
  • 快速排序总结
  • windows清除电脑开机密码,可保留原本的系统和资料,不重装系统
  • Mybatis操作数据库(注解+xml两个方式)
  • Flutter访问数据库