Git 属性
- Tier: Free, Premium, Ultimate
- Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
GitLab 支持在仓库的根目录中通过 .gitattributes 文件定义自定义 Git 属性。使用 .gitattributes 文件声明文件处理和显示的更改,例如:
编码要求
.gitattributes 文件必须使用 UTF-8 编码,且不能包含字节顺序标记(BOM)。如果使用其他编码,文件内容将被忽略。
混合文件编码支持
GitLab 会尝试自动检测文件的编码,但默认使用 UTF-8,除非检测器确信是其他类型(如 ISO-8859-1)。编码检测不正确可能导致某些字符无法显示,例如非 UTF-8 编码中的重音字符。
Git 内置了对这种情况的支持,会自动在指定编码和 UTF-8 之间转换文件。在 .gitattributes 文件中使用 working-tree-encoding 属性配置混合文件编码支持。
示例:
*.xhtml text working-tree-encoding=ISO-8859-1通过此示例配置,Git 在本地树中维护仓库中所有 .xhtml 文件的 ISO-8859-1 编码,但在提交到仓库时转换为 UTF-8。GitLab 能准确渲染这些文件,因为它只看到正确编码的 UTF-8。
如果将此配置应用于现有仓库,当本地副本具有正确编码但仓库没有时,可能需要触摸并重新提交文件。可以通过运行 git add --renormalize . 对整个仓库执行此操作。
更多信息,请参阅 working-tree-encoding。
语法高亮
.gitattributes 文件可用于定义在语法高亮文件和差异时使用的语言。更多信息,请参阅语法高亮。
自定义合并驱动程序
- Tier: Free, Premium, Ultimate
- Offering: GitLab Self-Managed, GitLab Dedicated
GitLab Self-Managed 管理员可以在 GitLab 配置文件中定义自定义合并驱动程序,然后在 Git 的 .gitattributes 文件中使用它们。GitLab.com 不支持自定义合并驱动程序。
自定义合并驱动程序是 Git 的一个功能,可让你对冲突解决进行高级控制。 自定义合并驱动程序仅在发生非平凡的合并冲突时才会被调用,因此它不是防止某些文件被合并的可靠方法。
配置自定义合并驱动程序
以下示例说明了如何在 GitLab 中定义和使用自定义合并驱动程序。
如何配置自定义合并驱动程序取决于安装类型。
-
编辑
/etc/gitlab/gitlab.rb。 -
添加类似以下的配置:
gitaly['configuration'] = { # ... git: { # ... config: [ # ... { key: "merge.foo.driver", value: "true" }, ], }, }
-
编辑
gitaly.toml。 -
添加类似以下的配置:
[[git.config]] key = "merge.foo.driver" value = "true"
在此示例中,在合并过程中,Git 使用 driver 值作为要执行的命令。在这种情况下,因为我们使用不带参数的 true,它总是返回非零返回码。这意味着对于 .gitattributes 中指定的文件,合并操作不会执行任何操作。
要使用自己的合并驱动程序,请将 driver 中的值替换为指向可执行文件的路径。有关如何调用此命令的更多详细信息,请参阅 Git 关于自定义合并驱动程序的文档。
使用 .gitattributes 设置自定义合并驱动程序适用的文件
在 .gitlabattributes 文件中,你可以设置要使用自定义合并驱动程序的文件路径。例如:
config/* merge=foo在这种情况下,config/ 文件夹下的每个文件都使用在 GitLab 配置中定义的名为 foo 的自定义合并驱动程序。
资源
- Git 属性 的官方 Git 文档