Git 代码库规则

以下函数可以从 @bazel_tools//tools/build_defs/repo:git.bzl. 加载。

用于克隆外部 Git 代码库的规则。

git_repository

load("@bazel//tools/build_defs/repo:git.bzl", "git_repository")

git_repository(name, branch, build_file, build_file_content, commit, init_submodules, patch_args,
               patch_cmds, patch_cmds_win, patch_tool, patches, recursive_init_submodules, remote,
               remote_module_file_integrity, remote_module_file_urls, repo_mapping, shallow_since,
               strip_prefix, tag, verbose, workspace_file, workspace_file_content)

克隆外部 Git 代码库。

克隆 Git 代码库,检出指定的标记或提交,并 使其目标可用于绑定。此外,还确定实际检出的提交的 ID 及其日期,并返回一个字典,其中包含提供此规则的可重现版本的参数(标记不一定是可重现版本)。

Bazel 会先尝试仅对指定的提交执行浅层提取。 如果失败(通常是由于缺少服务器支持),它会回退到对代码库执行完整提取。

建议使用 http_archive 而不是 git_repository。 原因如下:

  • Git 代码库规则依赖于系统 git(1),而 HTTP 下载器内置 于 Bazel 中,没有系统依赖项。
  • http_archive 支持将 urls 列表作为镜像,而 git_repository 仅支持 单个 remote
  • http_archive 可与 代码库缓存 搭配使用,但 git_repository 不行。如需了解详情,请参阅 #5116

属性

name 名称;必需

此代码库的唯一名称。

branch 字符串;可选

要检出的远程代码库中的分支。必须指定分支、标记或提交中的一个。

build_file 标签;可选

要用作此代码库的 BUILD 文件的文件。此属性是绝对标签(对于主代码库,请使用“@//”)。该文件不需要命名为 BUILD,但可以命名为 BUILD(例如,BUILD.new-repo-name 可能有助于将其与代码库的实际 BUILD 文件区分开来)。

build_file_content 字符串;可选

此代码库的 BUILD 文件的内容。

commit 字符串;可选

要检出的特定提交。必须指定分支、标记或提交中的一个。

init_submodules 布尔值;可选

是否克隆代码库中的子模块。

patch_args 字符串列表;可选

提供给补丁工具的实参。默认为 -p0,但对于 Git 生成的补丁,通常需要 -p1。如果指定了多个 -p 实参,则最后一个实参将生效。如果指定了除 -p 之外的实参,Bazel 将回退为使用 patch 命令行工具,而不是 Bazel 原生补丁实现。回退到 patch 命令行工具且未指定 patch_tool 属性时,将使用 `patch`。

patch_cmds 字符串列表;可选

在应用补丁后在 Linux/Macos 上应用的一系列 Bash 命令。

patch_cmds_win 字符串列表;可选

在应用补丁后在 Windows 上应用的一系列 Powershell 命令。如果未设置此属性,patch_cmds 将在 Windows 上执行,这需要存在 Bash 二进制文件。

patch_tool 字符串;可选

要使用的 patch(1) 实用程序。如果指定了此属性,Bazel 将使用指定的补丁工具,而不是 Bazel 原生补丁实现。

patches 标签列表;可选

在提取归档文件后要作为补丁应用的文件列表。默认情况下,它使用 Bazel 原生补丁实现,该实现不支持模糊匹配和二进制补丁,但如果指定了 `patch_tool` 属性或 `patch_args` 属性中存在除 `-p` 之外的实参,Bazel 将回退为使用 patch 命令行工具。

recursive_init_submodules 布尔值;可选

是否以递归方式克隆代码库中的子模块。

remote 字符串;必需

远程 Git 代码库的 URI

remote_module_file_integrity 字符串;可选

仅供内部使用。

remote_module_file_urls 字符串列表;可选

仅供内部使用。

repo_mapping 字典:字符串 -> 字符串;可选

仅在 `WORKSPACE` 上下文中:从本地代码库名称到全局代码库名称的字典。这样可以控制此代码库的依赖项的工作区依赖项解析。 例如,条目 `"@foo": "@bar"` 声明,对于此代码库依赖于 `@foo` 的任何时间(例如依赖于 `@foo//some:target`),它实际上应在全局声明的 `@bar` (`@bar//some:target`) 中解析该依赖项。 `MODULE.bazel` 上下文(在模块扩展的实现函数内调用代码库规则时)不支持此属性。

shallow_since 字符串;可选

可选日期,不得晚于指定的提交;如果指定了标记或分支(始终可以使用 --depth=1 克隆),则不允许使用此实参。将此类日期设置为接近指定的提交,即使服务器不支持对任意提交执行浅层提取,也可能允许对代码库执行浅层克隆。由于 Git 的 --shallow-since 实现存在 bug,因此不建议使用此属性,因为它可能会导致提取失败。

strip_prefix 字符串;可选

要从提取的文件中剥离的目录前缀。

tag 字符串;可选

要检出的远程代码库中的标记。必须指定分支、标记或提交中的一个。

verbose 布尔值;可选
workspace_file 标签;可选

空操作属性;请勿使用。

workspace_file_content 字符串;可选

空操作属性;请勿使用。

new_git_repository

load("@bazel//tools/build_defs/repo:git.bzl", "new_git_repository")

new_git_repository(name, branch, build_file, build_file_content, commit, init_submodules,
                   patch_args, patch_cmds, patch_cmds_win, patch_tool, patches,
                   recursive_init_submodules, remote, remote_module_file_integrity,
                   remote_module_file_urls, repo_mapping, shallow_since, strip_prefix, tag, verbose,
                   workspace_file, workspace_file_content)

克隆外部 Git 代码库。

克隆 Git 代码库,检出指定的标记或提交,并 使其目标可用于绑定。此外,还确定实际检出的提交的 ID 及其日期,并返回一个字典,其中包含提供此规则的可重现版本的参数(标记不一定是可重现版本)。

Bazel 会先尝试仅对指定的提交执行浅层提取。 如果失败(通常是由于缺少服务器支持),它会回退到对代码库执行完整提取。

建议使用 http_archive 而不是 git_repository。 原因如下:

  • Git 代码库规则依赖于系统 git(1),而 HTTP 下载器内置 于 Bazel 中,没有系统依赖项。
  • http_archive 支持将 urls 列表作为镜像,而 git_repository 仅支持 单个 remote
  • http_archive 可与 代码库缓存 搭配使用,但 git_repository 不行。如需了解详情,请参阅 #5116

属性

name 名称;必需

此代码库的唯一名称。

branch 字符串;可选

要检出的远程代码库中的分支。必须指定分支、标记或提交中的一个。

build_file 标签;可选

要用作此代码库的 BUILD 文件的文件。此属性是绝对标签(对于主代码库,请使用“@//”)。该文件不需要命名为 BUILD,但可以命名为 BUILD(例如,BUILD.new-repo-name 可能有助于将其与代码库的实际 BUILD 文件区分开来)。

build_file_content 字符串;可选

此代码库的 BUILD 文件的内容。

commit 字符串;可选

要检出的特定提交。必须指定分支、标记或提交中的一个。

init_submodules 布尔值;可选

是否克隆代码库中的子模块。

patch_args 字符串列表;可选

提供给补丁工具的实参。默认为 -p0,但对于 Git 生成的补丁,通常需要 -p1。如果指定了多个 -p 实参,则最后一个实参将生效。如果指定了除 -p 之外的实参,Bazel 将回退为使用 patch 命令行工具,而不是 Bazel 原生补丁实现。回退到 patch 命令行工具且未指定 patch_tool 属性时,将使用 `patch`。

patch_cmds 字符串列表;可选

在应用补丁后在 Linux/Macos 上应用的一系列 Bash 命令。

patch_cmds_win 字符串列表;可选

在应用补丁后在 Windows 上应用的一系列 Powershell 命令。如果未设置此属性,patch_cmds 将在 Windows 上执行,这需要存在 Bash 二进制文件。

patch_tool 字符串;可选

要使用的 patch(1) 实用程序。如果指定了此属性,Bazel 将使用指定的补丁工具,而不是 Bazel 原生补丁实现。

patches 标签列表;可选

在提取归档文件后要作为补丁应用的文件列表。默认情况下,它使用 Bazel 原生补丁实现,该实现不支持模糊匹配和二进制补丁,但如果指定了 `patch_tool` 属性或 `patch_args` 属性中存在除 `-p` 之外的实参,Bazel 将回退为使用 patch 命令行工具。

recursive_init_submodules 布尔值;可选

是否以递归方式克隆代码库中的子模块。

remote 字符串;必需

远程 Git 代码库的 URI

remote_module_file_integrity 字符串;可选

仅供内部使用。

remote_module_file_urls 字符串列表;可选

仅供内部使用。

repo_mapping 字典:字符串 -> 字符串;可选

仅在 `WORKSPACE` 上下文中:从本地代码库名称到全局代码库名称的字典。这样可以控制此代码库的依赖项的工作区依赖项解析。 例如,条目 `"@foo": "@bar"` 声明,对于此代码库依赖于 `@foo` 的任何时间(例如依赖于 `@foo//some:target`),它实际上应在全局声明的 `@bar` (`@bar//some:target`) 中解析该依赖项。 `MODULE.bazel` 上下文(在模块扩展的实现函数内调用代码库规则时)不支持此属性。

shallow_since 字符串;可选

可选日期,不得晚于指定的提交;如果指定了标记或分支(始终可以使用 --depth=1 克隆),则不允许使用此实参。将此类日期设置为接近指定的提交,即使服务器不支持对任意提交执行浅层提取,也可能允许对代码库执行浅层克隆。由于 Git 的 --shallow-since 实现存在 bug,因此不建议使用此属性,因为它可能会导致提取失败。

strip_prefix 字符串;可选

要从提取的文件中剥离的目录前缀。

tag 字符串;可选

要检出的远程代码库中的标记。必须指定分支、标记或提交中的一个。

verbose 布尔值;可选
workspace_file 标签;可选

空操作属性;请勿使用。

workspace_file_content 字符串;可选

空操作属性;请勿使用。