我使用了" worktrees"git管理我的仓库分支的功能。这意味着每个活动分支都位于自己的目录中,并且通过切换目录来完成切换分支。
不幸的是,这似乎与bazel交互不好。即使使用共享磁盘缓存,我发现bazel也会从我的WORKSPACE文件中为每个工作树目录重新下载远程存储库(可能是因为远程操作)。其中一些非常大,读取速度很慢。(我可以安装一个squid代理,但我觉得bazel的缓存应该足够了)。
我已经发现了这个讨论,但是没有解决方案。
我相信其他用户正在使用bazel和git工作树解决方案。其他用户可以提供什么建议?其他用户发现了哪些bazel配置可以改善这种情况?
对于不同的分支,共享一个输出基就可以了。将——output_base设置为某个共享文件夹,如bazel --output_base=my_output_base build //...
。您可以通过在适用的bazelrc中添加像startup --output_base=my_output_base
这样的行来使其自动执行。
请注意,这将防止在不同文件夹中并发构建。它们将排队,一次运行一个。
使用远程构建缓存
你可以通过:
启动你自己的本地instance_sudo docker run -u 1000:1000 -v ~/bazel_remote_cache:/data
-p 9090:8080 -p 9092:9092 buchgr/bazel-remote-cache
你可以设置一个home RC文件(.bazelrc
)来使用远程构建缓存:
cd ~
echo "build --remote_cache=http://localhost:9090" >> .bazelrc
如果你现在构建一个远程缓存被使用。
切换分支时,应该已经缓存了很多东西。根据我的经验,远程缓存在这里比本地缓存工作得更好。