以下函数可从 @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_strip, patch_tool, patches,
               recursive_init_submodules, remote, 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(请参阅“patch_strip”属性),但对于由 Git 生成的补丁,通常需要 -p1。如果指定了多个 -p 实参,则最后一个实参会生效。如果指定了除 -p 以外的实参,Bazel 将回退为使用补丁命令行工具,而不是 Bazel 原生补丁实现。回退到补丁命令行工具且未指定 patch_tool 属性时,将使用“patch”。 | 
| patch_cmds | 字符串列表;可选 在应用补丁后,要在 Linux/macOS 上应用的 Bash 命令序列。 | 
| patch_cmds_win | 字符串列表;可选 在应用补丁后要在 Windows 上应用的 PowerShell 命令序列。如果未设置此属性,系统将在 Windows 上执行 patch_cmds,这需要存在 Bash 二进制文件。 | 
| patch_strip | 整数;可选 如果设置为“N”,则相当于在“patch_args”的开头插入“-pN”。 | 
| patch_tool | 字符串;可选 要使用的 patch(1) 实用程序。如果指定了此属性,Bazel 将使用指定的补丁工具,而不是 Bazel 原生的补丁实现。 | 
| patches | 标签列表;可选 在提取归档文件后要作为补丁应用的文件列表。默认情况下,它使用不支持模糊匹配和二进制补丁的 Bazel 原生补丁实现,但如果指定了 `patch_tool` 属性或 `patch_args` 属性中存在除 `-p` 之外的实参,Bazel 将回退到使用 patch 命令行工具。 | 
| recursive_init_submodules | 布尔值;可选 是否以递归方式克隆代码库中的子模块。 | 
| remote | 字符串;必需 远程 Git 代码库的 URI | 
| 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` 文件的文件。您可以指定 `workspace_file` 或 `workspace_file_content`,也可以都不指定,但不能同时指定这两者。 | 
| workspace_file_content | 字符串;可选 相应代码库的 WORKSPACE 文件的内容。您可以指定 `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_strip, patch_tool, patches,
                   recursive_init_submodules, remote, 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(请参阅“patch_strip”属性),但对于由 Git 生成的补丁,通常需要 -p1。如果指定了多个 -p 实参,则最后一个实参会生效。如果指定了除 -p 以外的实参,Bazel 将回退为使用补丁命令行工具,而不是 Bazel 原生补丁实现。回退到补丁命令行工具且未指定 patch_tool 属性时,将使用“patch”。 | 
| patch_cmds | 字符串列表;可选 在应用补丁后,要在 Linux/macOS 上应用的 Bash 命令序列。 | 
| patch_cmds_win | 字符串列表;可选 在应用补丁后要在 Windows 上应用的 PowerShell 命令序列。如果未设置此属性,系统将在 Windows 上执行 patch_cmds,这需要存在 Bash 二进制文件。 | 
| patch_strip | 整数;可选 如果设置为“N”,则相当于在“patch_args”的开头插入“-pN”。 | 
| patch_tool | 字符串;可选 要使用的 patch(1) 实用程序。如果指定了此属性,Bazel 将使用指定的补丁工具,而不是 Bazel 原生的补丁实现。 | 
| patches | 标签列表;可选 在提取归档文件后要作为补丁应用的文件列表。默认情况下,它使用不支持模糊匹配和二进制补丁的 Bazel 原生补丁实现,但如果指定了 `patch_tool` 属性或 `patch_args` 属性中存在除 `-p` 之外的实参,Bazel 将回退到使用 patch 命令行工具。 | 
| recursive_init_submodules | 布尔值;可选 是否以递归方式克隆代码库中的子模块。 | 
| remote | 字符串;必需 远程 Git 代码库的 URI | 
| 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` 文件的文件。您可以指定 `workspace_file` 或 `workspace_file_content`,也可以都不指定,但不能同时指定这两者。 | 
| workspace_file_content | 字符串;可选 相应代码库的 WORKSPACE 文件的内容。您可以指定 `workspace_file` 或 `workspace_file_content`,也可以都不指定,但不能同时指定这两者。 |