.gitttributes文件
.gitattributes 是一个文本文件,文件中的一行定义一个路径的若干个属性,主要用于定义每种文件的属性,以方便 git 帮我们统一管理。当执行git动作的时候(比如git commit
),git会自动将目标文件处理为属性的状态。
在.gitattributes文件中,每一行都是一条规则,并且遵循如下规则:
比如github中创建仓库会自动生成如下一个.gitattributes文件:
上述文件中 *
代表匹配所有的文件,并给所有的文件设置text属性的值为auto。text属性值代表在执行git动作时,将目标文件中的所有换行符规范化,也就是将所有的换行符更换为LF。
.gitattributes文件不仅能给匹配到的文件设置属性,它还可以:
在.gitattributes中可以定义的属性主要有:
text
用于控制行尾的规范性。如果一个文本文件是规范的,则Git库汇总该文件(git 服务器上的文件)的行尾总是LF。对于工作目录,除了text属性之外,还可以设置eol属性或core.eol配置变量。eol
eol=lf
,[回车]
:入库时将行尾规范为LF,检出时行尾不强制转换为 CRLF。eol=crlf
,[换行、回车] :入库时将行尾规范为LF,检出时将行尾转换为CRLF。
diff
我们知道 git 主要是用来跟踪文件版本的,跟踪文件版本自然离不开比较差异,而diff 就是用来告诉 git 声明文件需要比较版本差异的。diff属性影响Git对特殊文件生成差异的方式。它可以告诉Git是否为路径生成文本补丁还是将路径视为二进制文件。它也可以影响在hunk头部显示的@@ -k,l +n,m @@,告诉Git使用外部命令来生成差异,或者是在生成差异之前让Git将二进制文件转换为文本文件。diff
强制视为文本文件,即使它包含一些通常从不会出现在文本文件的字节值,例如NUL。!diff
表示为非文本文件,没有设置diff属性的路径会生成differ二进制文件(如果启用了二进制补丁,会生成二进制补丁)。未定义
未指明diff属性的路径首先会检查其内容,如果它看起来像文本文件并且小于大文件阈值(core.bigFileThreshold),则将其视为文本文件,否则将生成differ二进制文件。
示例:
生效顺序:
在一个Git库中可以有多个.gitattributes 文件,不同.gitattributes 文件中,属性设置的优先级(从高到低)如下:
/myproj/info/attributes
文件/myproj/my_path/.gitattributes
文件/myproj/.gitattributes
文件
同一个.gitattributes 文件中,遵循覆盖原则,即后面的行会覆盖前面的设置,如果一个文件的某个属性被多次设置,则后设置的优先。
根据文件 .gitattributes 中的定义,更新文件的结尾行:
最后更新于
这有帮助吗?