gitattributes手册

Posted niaomingjian

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了gitattributes手册相关的知识,希望对你有一定的参考价值。

gitattributes(5) Manual Page

1.gitattributes是什么?

gitattributes用于定义每个路径的属性。

其语法是:pattern attr1 attr2 ...

2.什么叫做定义每个路径的属性?

比如:(pattern attr1)  *.txt text

*.txt就是一个pattern,用来匹配所有的.txt文件,匹配到的各个文件就有各自的路径。

比如text属性,text就是一个属性名,它的值是true。

3.pattern后面可以接多个属性,又是怎么给属性赋值的呢?

每种属性可能有Set,Unset,Set to a value,Unspecified几种状态。

Set状态就是 其值是true,单独写出这个属性名就表示其值是true。

Unset状态就是 其值是false,属性名加上-就表示其值是false。

Set to a value状态就是 属性名=值,值就是一个字符串

Unspecified状态 就是pattern没有匹配到路径,以及没有说明路径有还是没有属性。

举个例子,text属性

Set状态 text

Unset状态 -text

Set to a value状态 text=auto

4.在哪些地方可以写gitattributes呢?

①. $GIT_DIR/info/attributes 文件中 (优先级高)

②. 各个文件路径所在目录下的.gitattributes文件,以及所有父目录下的.gitattributes文件(优先级中,距离越远优先级越低)

③. 全局及系统范围下的文件(优先级低)

5.各个位置的gitattributes分别用于什么目的呢?

如果只想影响一个用户的某一个repository,就放在$GIT_DIR/info/attributes中。因为这个文件是repository所独有的,是不会放到版本控制中的,因而别的repository访问不到。

对于所有用户都感兴趣的gitattributes就放到.gitattributes文件中。因为这些文件会放到版本控制中,分发给其他的repository。

对于影响一个用户的所有repository的属性就放到由core.attributesfile配置选项指定的文件中。

针对一个系统中的所有用户的属性应该放到$(prefix)/etc/gitattributes文件中。

6.gitattributes中的属性对Git有什么影响呢?

对于迁入或迁出的影响

迁入就是将working tree中你准备的内容保存到repository中,比如git add,git commit命令。

迁出就是将保存在repository中的内容拷贝到working tree中,比如git checkout,git merge命令。

text属性

给一个路径设置text属性可以启用和控制end-of-line的规范化。当一个文本文件被规范化时,在repository中它的行结束符会被转换为LF。

要控制在working directory中使用的行结束符,就要为单个文件使用eol属性以及为所有文本文件使用core.eol配置

①.Set状态 在路径中设置text属性为Set状态会启用end-of-line的规范化并将这个路径标记为文本文件。不需要猜测内容类型,End-of-line转换就会发生。

②.Unset状态 在路径中设置text属性为Unset状态就是告诉git在迁入迁出时不尝试任何的end-of-line转换。

③.Set to string value "auto" 状态 设置text属性为“auto”状态时, 路径就标记为自动end-of-line规范化。如果git确定内容是文本,在迁入时,行结束符就被规范化为LF。

④.Unspecified状态 如果text属性没有被指定,git使用core.autocrlf配置变量来决定这个文件是否应该被转换。

任何其他值都会使得git的行为和text属性设置为Unspecified状态时一样。

eol属性

这个属性用于设定在working directory中使用的行结束符。它会动用end-of-line规范化而不做任何的内容检查,高效地设置text属性。

①.Set to string value "crlf" 状态  这个设置会强制git在迁入文件时规范化行结束符,并且当文件迁出时,将它们转为CRLF。

②.Set to string value "lf" 状态  这个设置会强制git在迁入文件时规范化行结束符为LF,并且当文件迁出时,阻止转换为CRLF。

 

以上是关于gitattributes手册的主要内容,如果未能解决你的问题,请参考以下文章

我可以在更新gitattributes后使用Git批量更改行尾吗?

当本地git repo执行时,GitHub不强制执行.gitattributes

在gitattributes文件的一行中使用多个过滤器是否存在固有问题?

Git 索引和工作树 EOL 值与 .gitattributes 中设置的值不匹配

text gitattributes(忽略生产环境中的文件或文件夹)

记录.gitattributes 设置合并时使用本地文件无效的解决方案