Git文件.gitignore、.gitattributes、.gitkeep用法解析

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
简介: .gitignore、.gitattributes、.gitkeep都是常见的Git相关文件,本文介绍它们到底该如何使用。

.gitignore

ProGit.gitignore有相应的描述。

.gitignore是一个需要写入内容的文件,用于指定要忽略的刻意untrack的文件。

需要注意的是,.gitignore不对已经track的文件起效。

.gitignore文件中的每一行都指定一个模式(pattern)。在决定是否忽略路径(path)时,Git通常会检查来自多个源的gitignore pattern,按照以下从高到低的优先顺序(在一个优先级内,最后匹配的pattern决定结果):

  • 从命令行读取支持它们的命令的pattern。
  • 从与路径相同的目录或任何父目录(直到工作树的顶层)中的.gitignore文件中读取的pattern,较高级别文件中的pattern被较低级别文件中的pattern覆盖到包含文件的目录。这些pattern式与.gitignore文件的位置相匹配。项目通常在其存储库中包含此类.gitignore文件,其中包含作为项目构建的一部分生成的文件的pattern。
  • $GIT_DIR/info/exclude读取的pattern。
  • 从配置变量core.excludesFile指定的文件中读取的pattern。

放置pattern的文件取决于pattern的使用方式:

  • 应该受版本控制并通过clone分发到其他存储库的pattern(即所有开发人员都希望忽略的文件)应该使用.gitignore文件。
  • 特定于特定存储库但不需要与其他相关存储库共享的pattern(例如,存在于存储库中但特定于一个用户工作流的辅助文件)应该使用$GIT_DIR/info/exclude文件。
  • 用户希望Git在所有情况下忽略的pattern(例如,由用户选择的编辑器生成的备份或临时文件)通常使用用户~/.gitconfig中由core.excludesFile指定的文件。它的默认值为$XDG_CONFIG_HOME/git/ignore。如果$XDG_CONFIG_HOME未设置或为空,则使用$HOME/.config/git/ignore代替。

底层Git管道工具,例如git ls-filesgit read-tree,读取由命令行选项指定的gitignore pattern,或从命令行选项指定的文件中读取。
而更高级别的Git工具,例如git statusgit add,使用上述来源的pattern。

Pattern Format:

  • 空行不匹配任何文件,因此它可以用作分隔符以提高可读性。
  • #开头的行用作注释。对于以hash开头的pattern,在第一个hash前放置一个\
  • 每行pattern的尾部空格将被忽略,除非它们用\转义。
  • 可选前缀!起到否定pattern排除的作用,任何被此前的pattern排除的匹配文件都将再次包含在内。

    • 出于性能考虑,Git不会列出排除的目录,因此如果已经排除!修饰文件的父目录,则无法重新包含该文件,包含文件的任何pattern都无效,无论它们是在哪里定义的。
    • !开头的pattern文本需要用\转义。
  • /用作目录分隔符,可能出现在pattern的任何位置。

    • 如果pattern的开头或(和)中间有/,则该pattern是相对于特定gitignore文件本身的目录级别的,否则pattern也可能在gitignore级别以下的任何级别匹配。
    • 如果pattern的末尾有/,则该pattern将仅匹配目录,否则该pattern可以匹配文件和目录。
  • *匹配除/以外的任何内容。
  • ?匹配除/之外的任何一个字符。
  • 范围符号,例如[a-zA-Z],可用于匹配范围内的字符之一。
  • 与完整路径名匹配的pattern中的**具有特殊含义:

    • 前导**后跟/表示在所有目录中都匹配。
    • 末尾**匹配里面的所有内容,深度无限制。
    • /后跟**/匹配零个或多个目录。
    • 其他的连续*组合被视为常规星号,将根据之前的规则进行匹配。

如果要停止跟踪当前track的文件,可以使用git rm --cached

访问工作树中的.gitignore文件时,Git不遵循符号链接。当从索引或树访问文件而不是从文件系统访问文件时,这可以保持行为一致。
说明:符号链接,也称软链接,是一类特殊的文件,其包含有一条以绝对路径或者相对路径的形式指向其它文件或者目录的引用。

.gitattributes

ProGit.gitattributes有相应的描述。

.gitattributes是一个需要写入内容的文件,用于定义每个路径的属性。

.gitattributes文件中的每一行格式为pattern attr1 attr2 ...

  • 一个模式后跟一个属性列表,用空格分隔。
  • 前导和尾随空格将被忽略。
  • #开头的行将被忽略,视作注释。
  • 以双引号开头的pattern以C语言风格引用。
  • 当pattern与所讨论的路径匹配时,该行中列出的属性将被赋予该路径。

对于给定路径,每个属性的状态可能是:

  • Set:只列出属性列表中的属性名称,指定特定的属性值true
  • Unset:列出以属性列表中的属性名称,加上-前缀,指定特定的属性值false
  • Set to a value:列出以属性列表中的属性名称,加上=和属性值后缀,指定特定字符串的属性值。
  • Unspecified:没有pattern匹配路径,并且没有说明路径是否具有属性。

当多个pattern与路径匹配时,后面的行会覆盖前面的行,此覆盖是按属性完成的。

pattern匹配路径的规则与.gitignore文件中的规则基本相同,不同点在于:

  • 禁止否定型pattern。
  • 与目录匹配的pattern不会递归匹配该目录内的路径。

属性分配给路径的优先级(从高到低):

  • $GIT_DIR/info/attributes文件
  • 与相关路径位于同一目录中的.gitattributes文件
  • 相关路径的父目录中的.gitattributes文件(从文件所在目录开始直至工作树,包含.gitattributes的目录离相关路径越远,其优先级越低)
  • 全局和系统范围的相关文件。

当工作树中缺少.gitattributes文件时,索引中的路径将用作后备。在checkout过程中,使用索引中的.gitattributes,然后将工作树中的文件用作后备。

属性配置的位置选择:

  • 如果属性只影响单个存储库(即将属性分配给特定于该存储库的一个用户工作流的文件),则应该设置$GIT_DIR/info/attributes文件。
  • 如果属性应该受版本控制并分发到其他存储库,则应该设置.gitattributes文件。
  • 如果属性影响单个用户的所有存储库,应该设置由core.attributesFile配置选项指定的文件,与git config有关,默认值为$XDG_CONFIG_HOME/git/attributes。如果$XDG_CONFIG_HOME未设置或为空,则使用$HOME/.config/git/attributes代替。系统上所有用户的属性都应该放在$(prefix)/etc/gitattributes文件中。

!为前缀的属性名称可用于覆盖未指定状态路径的属性设置。

.gitkeep

ProGit没有专门对.gitkeep做出规定。

.gitkeep是一个空文件,用于充当一个空文件夹的占位符。Git不允许track或者commit一个空文件夹,想要提交并显示这样的空文件夹,保持这个项目的结构,就需要.gitkeep充当占位符。

实际上,.nofile或者其他的占位文件也可以起到同样的作用。之所以使用.gitkeep是一种规范,是因为这是一种普遍习惯下的约定俗成。

文件生成

Windows系统生成以上文件可以借助文本编辑器,也可以记事本txt直接改名。

文本编辑器生成的方法非常简单,略。

Windows记事本txt改名的方法是创建默认的新建文本文档.txt,更名为.gitattributes.,即生成.gitattributes

请注意更名为.gitattributes.而不是.gitattributes

案例分析

例如,存在如下的目录结构:

  • 📁root

    • 📁src

      • 📁main

        • 📁resources

          • 🗄️application.yml
        • 📁java

          • 📁com

            • 📁example

              • 📁constant
              • 📁controller

                • 🗄️StudentManagementController.java
              • 📁dao

                • 🗄️StudentDAO.java
              • 📁entity

                • 🗄️Student.java
              • 📁service

                • 📁impl

                  • 🗄️StudentManagementImpl.java
                • 🗄️StudentManagement.java
      • 📁test (非空)

        • 📁…… (省略)
        • 🗄️…… (省略)
    • 📁target (非空)

      • 📁…… (省略)
      • 🗄️…… (省略)
    • 🗄️.gitattributes
    • 🗄️.gitignore
    • 🗄️pom.xml
    • 🗄️README.md

.gitattributes配置为:

*.* linguist-language=python

.gitignore配置为:

.idea
.classpath
.project
.settings
.checkstyle
.DS_Store
*.iml
target
**/.flattened-pom.xml

根据以上设定:

  • GitHub解析到的语言类型是Python(所有的文件都会被识别为Python文件,尽管这是完全不合理的,实际不要这样去操作)
  • target文件夹及其包含的所有子文件夹和文件都会被忽略,不会被记录下来
  • /root/src/main/java/com/example/constant目录不会被记录下来,想要记录下来需要在其中加一个.gitkeep的空文件

说明

本文首发于CSDN,为博主本人创作,修改后搬运至阿里云开发者社区发表。

相关文章
|
28天前
|
Java
Java“解析时到达文件末尾”解决
在Java编程中,“解析时到达文件末尾”通常指在读取或处理文件时提前遇到了文件结尾,导致程序无法继续读取所需数据。解决方法包括:确保文件路径正确,检查文件是否完整,使用正确的文件读取模式(如文本或二进制),以及确保读取位置正确。合理设置缓冲区大小和循环条件也能避免此类问题。
|
27天前
|
自然语言处理 数据处理 Python
python操作和解析ppt文件 | python小知识
本文将带你从零开始,了解PPT解析的工具、工作原理以及常用的基本操作,并提供具体的代码示例和必要的说明【10月更文挑战第4天】
235 60
|
27天前
|
Shell 开发工具 git
git学习三:git使用:删除仓库,删除仓库内文件
通过GitHub的设置页面删除仓库,以及如何使用Git命令行删除仓库中的文件或文件夹。
116 1
git学习三:git使用:删除仓库,删除仓库内文件
|
8天前
|
Dart 安全 编译器
Flutter结合鸿蒙next 中数据类型转换的高级用法:dynamic 类型与其他类型的转换解析
在 Flutter 开发中,`dynamic` 类型提供了灵活性,但也带来了类型安全性问题。本文深入探讨 `dynamic` 类型及其与其他类型的转换,介绍如何使用 `as` 关键字、`is` 操作符和 `whereType<T>()` 方法进行类型转换,并提供最佳实践,包括避免过度使用 `dynamic`、使用 Null Safety 和异常处理,帮助开发者提高代码的可读性和可维护性。
63 1
|
19天前
|
数据安全/隐私保护 流计算 开发者
python知识点100篇系列(18)-解析m3u8文件的下载视频
【10月更文挑战第6天】m3u8是苹果公司推出的一种视频播放标准,采用UTF-8编码,主要用于记录视频的网络地址。HLS(Http Live Streaming)是苹果公司提出的一种基于HTTP的流媒体传输协议,通过m3u8索引文件按序访问ts文件,实现音视频播放。本文介绍了如何通过浏览器找到m3u8文件,解析m3u8文件获取ts文件地址,下载ts文件并解密(如有必要),最后使用ffmpeg合并ts文件为mp4文件。
|
27天前
|
开发工具 git 索引
git上面中新建gitignore文件,并且去除已经在仓库版本管理中的文件夹
git上面中新建gitignore文件,并且去除已经在仓库版本管理中的文件夹
48 4
|
21天前
|
前端开发 JavaScript UED
axios取消请求CancelToken的原理解析及用法示例
axios取消请求CancelToken的原理解析及用法示例
68 0
|
4天前
|
缓存 Java Shell
[Git]入门及其常用命令
本文介绍了 Git 的基本概念和常用命令,包括配置、分支管理、日志查看、版本回退等。特别讲解了如何部分拉取代码、暂存代码、删除日志等特殊需求的操作。通过实例和图解,帮助读者更好地理解和使用 Git。文章强调了 Git 的细节和注意事项,适合初学者和有一定基础的开发者参考。
20 1
[Git]入门及其常用命令
|
27天前
|
开发工具 git
git学习四:常用命令总结,包括创建基本命令,分支操作,合并命令,压缩命令,回溯历史命令,拉取命令
这篇文章是关于Git常用命令的总结,包括初始化配置、基本提交、分支操作、合并、压缩历史、推送和拉取远程仓库等操作的详细说明。
94 1
git学习四:常用命令总结,包括创建基本命令,分支操作,合并命令,压缩命令,回溯历史命令,拉取命令
|
8天前
|
开发工具 git 开发者

推荐镜像

更多