如何取消bazelrc中设置的标志?

如何取消bazelrc中设置的标志?,bazel,Bazel,My bazel.rc具有设置远程缓存的标志,但在某些情况下,我希望禁用它,例如在具有网络限制的环境中运行时 如何“取消设置”bazel.rc中设置的标志?例如,bazel.rc设置了--google_-credentials=/path/to/key,那么我如何覆盖它并传入null以便它不查找凭据呢 我想保留bazel.rc的其余部分,所以我不想简单地忽略它 部分bazel.rc: build --google_credentials=/path/to/key build --google_d

My bazel.rc具有设置远程缓存的标志,但在某些情况下,我希望禁用它,例如在具有网络限制的环境中运行时

如何“取消设置”bazel.rc中设置的标志?例如,bazel.rc设置了
--google_-credentials=/path/to/key
,那么我如何覆盖它并传入null以便它不查找凭据呢

我想保留bazel.rc的其余部分,所以我不想简单地忽略它

部分bazel.rc:

build --google_credentials=/path/to/key
build --google_default_credentials
build --google_auth_scopes=https://www.googleapis.com/auth/cloud-source-tools
build --bes_backend=buildeventservice.googleapis.com
build --bes_best_effort=false
build --bes_timeout=10s
build --project_id=123456
build --remote_cache=remotebuildexecution.googleapis.com
build --remote_instance_name=projects/myproject
build --spawn_strategy=remote
build --genrule_strategy=remote
build --tls_enabled=1
build --remote_accept_cached=true

命令行上指定的标志将覆盖bazelrc文件中的任何内容。因此,您可以指定
--google\u credentials=
来清除该值

还有其他方法可以设置此设置。在您的例子中,假设您希望默认情况下使用
--foo=1--bar=2
,但有时您希望关闭这些选项。必须记住所有的标志才能关闭,这样您就可以创建配置了,这会很烦人。您的
bazelrc
文件如下所示:

build --foo=1 --bar=2
build:nofoo --foo= --bar=

当你正常地构建bazel时,你会得到
--foo=1
--bar=2
。当您不需要
foo
bar
时,您需要
bazel build--config=nofoo
,它扩展到
bazel build--foo=1--bar=2--foo=--bar=
,后面的标志将覆盖前面的标志

传递
--google_credentials=
不会清除该值(即将其设置为
null
);相反,它将值设置为
,导致
无法打开身份验证凭据文件“”
Hmm,对。这将是我们的标志解析器的一个怪癖。我会提出一个关于无法将google_凭据设置为nothing的错误。另外,我在尝试这个时遇到了一个NullPointerException,这也是一个bug…所以实际上有一个解决方法,但它有点难看。有一个叫做调用策略的功能可以控制标志,但它是作为启动标志传递的,因此它不能与
--config
bazel--invocation\u policy=“flag\u policies{flag\u name:\”google\u凭证\”使用默认{}标志{策略{flag\u name:\“spawn\u策略\”使用默认{flag\u策略{flag\u name:\”genrule\u strategy\'use\u default{}flag\u policies{flag\u name:'remote\u cache\'use\u default{}flag\u policies{flag\u name:\'bes\u backend\'use\u default{}build
。如果需要,可以将其放入shell变量中,然后执行
bazel$NO\u remote build
。它不是非常优雅,但应该能用。您还可以创建别名或shell函数,如
bazel_no_remote
。您还可以将打开远程缓存的标志移动到它们自己的配置中,但是您必须记住在每次调用时使用该配置。一个包含所有标志,减去远程缓存标志。然后,您的
~/.bazelrc
文件导入带有所有标志的文件,并添加远程缓存标志。默认情况下,通过这种方式可以获得远程缓存,要关闭远程缓存,可以使用
~/other_rc_file
指定
--bazelrc
启动标志。但是我注意到你说的是“bazelrc”,它通常在你的仓库中,所以你的旗帜必须存在于你的主目录中的bazelrc文件中。