Timetombs

泛义的工具是文明的基础,而确指的工具却是愚人的器物

66h / 116a
,更新于 2024-04-06T22:06:23Z+08:00 by   35f4f88

[Git] .gitattributes

版权声明 - CC BY-NC-SA 4.0

1 .gitattributes 的作用

位于Git Repo根目录的.gitattributes文件,用来为Git管理的文件配置一些属性。这些属性控制着Git管理的如下三个区域的文件。

Git 三个工作区域

通常主要用来统一EOL=end of line(在Windows上默认是crlf, 在Linux和macOS上则是lf)。

1.1 语法

.gitattributes是一个文本文件,每一行使用pattern匹配一些文件,然后设置对应的属性:

pattern attr1 attr2 ...

每一个属性都遵循如下4种规则进行配置:

# 设置attr1,表示true
pattern attr1

# 未设置attr1,表示false
pattern -attr1

# 设置attr1的值为1
pattern attr1=1

# 未指定任何值
pattern 

1.2 text 属性

text属性指示Git如何处理 .git directory 区域中的文本文件的EOL。比如:

# 使用lf存储*.sh文件。
*.sh text

# 不控制*.sh文件的EOL。
*.sh -text

1.3 eol 属性

eol属性指示Git如何处理 working directory 区域中的文本文件的EOL。比如:

# 使用lf存储*.sh文件, 在working directory则继续使用lf。
*.sh  text eol=lf

# 使用lf存储*.cs文件, 在working directory则自动转换为crlf。
*.cs  text eol=crlf

2 MACRO 属性

内置的宏属性binary等价于-diff -merge -text

3 最佳实践

当前站点项目所使用的配置如下:

/.gitattributes/.gitattributes
# text   : 使用 lf 换行符进行存储.
# binary : 原样存储.

# 自动识别文件是否为text
*               text=auto eol=lf

# 使用 lf 存储, checkout 时替换为 crlf.
*.bat           text eol=crlf
*.cmd           text eol=crlf
*.ps1           text eol=crlf
*.cs            text eol=crlf
*.cake          text eol=crlf
*.xaml          text eol=crlf
*.csproj        text eol=crlf
*.cshtml        text eol=crlf
*.sln           text eol=crlf


# 原样存储
*.reg           binary
*.XRM-MS        binary
*.cer           binary
*.crt           binary

这样以来存储到Git中的文本文件都统一采用lf,而针对个别文件在工作区中采用crlf(亦可灵活的调整工作区中的EOL,而无需改动存储区已经存在的文件),需同时进行如下设置

# 阻止Git进行自动转换
git config --global core.autocrlf false

# 当提交的文件不符合.gitattributes的配置时,阻止git add命令
git config --global core.safecrlf true

.gitattributes文件加入git仓库中后,需要执行一下如下命令:

git add --renormalize .

上述命令会检查git仓库中不符合配置的一些文件,然后再把这些文件commit到仓库中即可。

4 参考

https://git-scm.com/docs/gitattributes

https://help.github.com/en/github/using-git/configuring-git-to-handle-line-endings

上一篇 : [Git] config
下一篇 : [Git] 内容寻址文件系统