原文
Cargo
最近在晚间
通道上取得了一个不稳定的
功能(从nightly-2023-11-17
开始),它可自动清理Cargo
主目录中的缓存内容
.
总之,请求使用晚间
通道的人启用此功能
,并在Cargo
问题跟踪器上报告问题.要启用它,请在你的一般在~/.cargo/config.toml
或%USERPROFILE%\.cargo\config.toml
(对窗口
)的Cargo
配置文件中放入以下内容
:
[unstable]
gc = true
或设置CARGO_UNSTABLE_GC=true
环境变量或使用-ZgcCLI
标志来为单个命令
打开它.
特别希望使用不寻常的文件系统或环境的人
试一下,因为实现的某些部分
是相关的,在为所有人启用它
前需要通过测试
.
该特点是什么
在Cargo
主目录中,Cargo
保存了可无限增长
且可能会非常大
(很容易达到许多GB
)的各种缓存数据
.社区成员已开发了管理该缓存的工具
,比如cargo-cache
,但cargo
自身从未公开过管理它的能力
.
此缓存包括:
1,如来自crates.io
的包依赖元数据
的注册表索引数据
.
2,从注册表
下载的压缩.crate
文件.
3,rustc
用来读取源码和编译依赖
的.crate
文件的未压缩内容
.
4,git
依赖使用的git
仓库的克隆
.
新的垃集("GC"
)功能增加了跟踪此缓存数据
,这样cargo
可自动或手动
删除未使用的文件
.它保存一个跟踪上次使用各种缓存元素
的时间
的SQLite
数据库.
每次运行读写缓存数据
的cargo
命令时,它都会使用上次使用该数据的时间戳
更新数据库
.
尚未包括清理目标目录
.
自动清理
运行cargo
时,它每天检查
一次上次使用的缓存跟踪器
,并确定在一段时间内
是否有不用的缓存元素
.如果没有
,则自动删除它们
.
大多数一般会执行重要工作的命令
都会有它,如cargo build
或cargo fetch
.
默认,如果有1个月
未使用,则删除
可在本地重建的数据
,并删除3个月
后必须重新下载的数据
.
如果cargo
离线状态,如使用--离线
或--frozen
函数,以避免删除长时离线
时可能要用的项目
,则禁止自动删除函数
.
最初实现
公开了各种配置块
来控制自动清理
的工作方式.但是,稳定下来时,没有公开太多的低级细节
,因此在未来
可能会改变.
手动清理
如果想手动从缓存
中删除数据
,则在cargo clean gc
子命令下加了几个选项
.可用此子命令
来正常的自动每日清理
,或指定要删除的数据
的不同选项
.
有几个选项
可用来指定要删除的数据
的期限
(如--maxdownloadage=3days
)或指定缓存的最大大小
(如--maxdownloadsize=1GiB
).
注意
启用gc
功能后,只需继续使用cargo
的正常业务
即可.可见,在cargo
的~/.cargo/.globalcache
主目录中的SQLite
数据库保存数据.
在第一次使用cargo
后,它填充数据库
,跟踪cargo
主目录中已有的所有数据
.然后,1个月后,cargo
应该开始删除旧数据
,3个月
后删除更多数据
.
最终是,在这段时间后,会开始注意到主目录
总体上使用的空间
更少.
如果遇见问题
,可禁止gc
功能,cargo
应该会恢复到之前的行为
.