Help us learn about your current experience with the documentation. Take the survey.

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 中定义和使用自定义合并驱动程序。

如何配置自定义合并驱动程序取决于安装类型。

  1. 编辑 /etc/gitlab/gitlab.rb

  2. 添加类似以下的配置:

    gitaly['configuration'] = {
      # ...
      git: {
        # ...
        config: [
          # ...
          { key: "merge.foo.driver", value: "true" },
        ],
      },
    }
  1. 编辑 gitaly.toml

  2. 添加类似以下的配置:

    [[git.config]]
    key = "merge.foo.driver"
    value = "true"

在此示例中,在合并过程中,Git 使用 driver 值作为要执行的命令。在这种情况下,因为我们使用不带参数的 true,它总是返回非零返回码。这意味着对于 .gitattributes 中指定的文件,合并操作不会执行任何操作。

要使用自己的合并驱动程序,请将 driver 中的值替换为指向可执行文件的路径。有关如何调用此命令的更多详细信息,请参阅 Git 关于自定义合并驱动程序的文档。

使用 .gitattributes 设置自定义合并驱动程序适用的文件

.gitlabattributes 文件中,你可以设置要使用自定义合并驱动程序的文件路径。例如:

config/* merge=foo

在这种情况下,config/ 文件夹下的每个文件都使用在 GitLab 配置中定义的名为 foo 的自定义合并驱动程序。

资源