• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • 在 centOS 上设置 Git 配置文件 .gitattributes

    当执行 git 动作时(git add、git commit),.gitattributes文件允许你指定由 git 使用的文件和路径的属性。换句话说,每当有文件保存或者创建时,git 会根据指定的属性来自动地保存。

    .gitattributes是一个文本文件,文件中的一行定义一个路径的若干个属性,主要用于定义每种文件的属性,以方便 git 帮我们统一管理。

    gitattributes文件示例:

    *           text=auto
    *.txt       text
    *.jpg       -text
    *.vcproj    text eol=crlf
    *.sh        text eol=lf
    *.py        eol=lf
    
    • 第1行,对任何文件,设置 text=auto,表示文件的行尾自动转换。如果是文本文件,则在文件入 Git 库时,行尾自动转换为 LF。如果已经在入 Git 库中的文件的行尾为 CRLF,则该文件在入 Git 库时,不再转换为 LF。
    • 第2行,对于 txt 文件,标记为文本文件,并进行行尾规范化。
    • 第3行,对于 jpg 文件,标记为非文本文件,不进行任何的行尾转换。
    • 第4行,对于 vcproj 文件,标记为文本文件,在文件入 Git 库时进行规范化,即行尾为 LF。但是在检出到工作目录时,行尾自动转换为 CRLF。
    • 第5行,对于sh 文件,标记为文本文件,在文件入Git库时进行规范化,即行尾为LF。在检出到工作目录时,行尾也不会转换为CRLF(即保持LF)。
    • 第6行,对于 py 文件,只针对工作目录中的文件,行尾为 LF。

    .gitattributes 文件中可以定义的属性

    text

    用于控制行尾的规范性。如果一个文本文件是规范的,则 Git 库汇总该文件(git 服务器上的文件)的行尾总是 LF。对于工作目录,除了 text 属性之外,还可以设置 eol 属性或 core.eol 配置变量。

    .gitattributes文件的一行中,一个属性(以 text 属性为例)可能有 4 种状态:

    text         # 表示文本。
    -text        # 表示非文本。可以覆盖其他文件中的声明。
    text=string  # 表示非文本。可以覆盖其他文件中的声明。
    !text    # 可以覆盖其他文件中的声明。
    


    diff

    我们知道 Git 主要是用来跟踪文件版本的,跟踪文件版本自然离不开比较差异,而 diff 就是用来告诉 Git 声明文件需要比较版本差异的。

    diff 属性影响 Git 对特殊文件生成差异的方式。它可以告诉 Git 是否为路径生成文本补丁还是将路径视为二进制文件。它也可以影响在 hunk 头部显示的@@-k,l +n,m @@,告诉 Git 使用外部命令来生成差异,或者是在生成差异之前让 Git 将二进制文件转换为文本文件。

    • diff:强制视为文本文件,即使它包含一些通常从不会出现在文本文件的字节值,例如 NUL。
    • !diff:表示为非文本文件,没有设置diff属性的路径会生成differ二进制文件(如果启用了二进制补丁,会生成二进制补丁)。
    • 未定义:未指明 diff 属性的路径首先会检查其内容,如果它看起来像文本文件并且小于大文件阈值(core.bigFileThreshold),则将其视为文本文件,否则将生成 differ 二进制文件。

    core.bigFileThreshold:所有平台上的默认值为 512 MiB。大于此大小的文件将被缩减,而不会尝试增量压缩。