介绍

gitattributes - Defining attributes per path

官文文档中对 Git 属性的定义就是每个路径的属性。

Git 属性支持的功能比较多:识别为文本或二进制、文本文件换行符转换、合并策略、差异显示等等。

文本与二进制

Git 对文本与二进制文件的处理是不同的:

  • 文本文件会显示出修改的差异,并且在合并时会按照行进行合并
  • 二进制文件不显示修改的差异,在合并时会提示文件冲突,需要人工介入

Git 内部会自动根据扩展名识别文本与二进制文件,但是一些文本文件是由机器产生的,Git 会将其视作文本文件而自动进行合并,这会导致文件损坏,并且这种情况很难察觉。

推荐将所有文件取消文本属性,然后根据项目的需要将部分文件开启文本属性,.gitattributes

1
2
3
* -text

Assets/*.cs text

换行符转换

Git 默认会对文本文件进行换行符转换,默认情况下在提交时转换为 LF,检出时根据当前平台转换为 LF 或 CRLF。这里强烈建议 Git 仓库有自己独立的设置,而不受 Git 全局配置的影响,否则文件的内容在不同的机器上会出现不同。

另外,如果想要规避 Unity 的编译警告:

1
2
There are inconsistent line endings in the 'someFileName.cs' script. Some are Mac OS X (UNIX) and some are Windows.
This might lead to incorrect line numbers in stacktraces and compiler errors. Unitron and other text editors can fix this using Convert Line Endings menu commands.

建议设置 .gitattributes,统一设置 C# 文件换行符为 Windows 换行符 CRLF

1
Assets/*.cs text eol=crlf

模板

大部分 Git 仓库都会添加对应的 .gitignore 文件,并且使用在线网站生成此文件,例如:gitignore.io

其实 .gitattributes 也应该这样做,现在已经有这样的网站了:gitattributes.io

参考资料