在多重回购中使用Bazel

在多重回购中使用Bazel,bazel,Bazel,在多重回购环境中使用Bazel时,维护依赖关系一致性的最佳策略是什么 例如,工作区(单个git回购)A、B、C都依赖于D。当D的版本发生变化时,我希望A、B和C都位于D的同一版本上,并且工作量最小。您可以在A、B和C的工作区文件中使用git_存储库规则: load("@bazel_tools//tools/build_defs/repo:git.bzl", "git_repository") git_repository( name = "D", remote = "https://g

在多重回购环境中使用Bazel时,维护依赖关系一致性的最佳策略是什么


例如,工作区(单个git回购)A、B、C都依赖于D。当D的版本发生变化时,我希望A、B和C都位于D的同一版本上,并且工作量最小。

您可以在A、B和C的
工作区
文件中使用
git_存储库
规则:

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

git_repository(
  name = "D",
  remote = "https://github.com/my_org/d",
  branch = "master",
)
请注意,
branch
属性设置为
master
,而不是某些特定的提交。分支不必是主分支。它可以是任何一个分支


如果您想要一种复制构建的方法, 这可以通过使用
bazel sync
命令来完成

详细说明了创建外部工作区的“快照”文件所需的步骤(
resolved.bzl


您可以将其用作另一个构建工件,用于将来的调查,也可以对何时更新“指针”进行更多的控制通过调用
bazel sync
--experimental\u repository\u resolved\u file=resolved.bzl

调用外部工作区,这可能会有所帮助,在我的情况下,这将是包的特定版本。例如,分支不能指向master,而是指向特定的发布分支。我想知道的是,更新我所有的工作区,使之能够轻松地指向发布分支的同一个新版本。你可以输入任何你想要的分支名称。它不必是
master
您也可以在
starlark
中创建一个变量,因此所有
git_存储库
目标都将指向同一个分支,您只需指定一次。是的,但只要我在分支上输入一个名称,就意味着我必须随时更新该名称。导入包含指向最新版本的变量的bzl文件似乎是一条可行之路。