Apache Subversion 1.15 的 Pristines On Demand 通过按需下载原本保存在客户端的文件基准版本,减少本地存储占用。Apache 表示,选择启用后,工作副本的存储占用最多可减少 50%。这一数字并不保证实际节省比例。

Apache Software Foundation 在 2026年10月14日的公告中表示,1.15 已可下载。存储占用的减少发生在开发者设备上的工作副本中,该功能并不会缩小服务器端版本库。

支持本地比较的 BASE 缓存

以往的工作副本除了保存待编辑的文件,还保存每个文件的 BASE 修订版本。BASE 是比较或还原本地修改时使用的基准版本,这份文件副本称为 pristine。

根据发行说明,默认配置下的 .svn 目录占用的空间略多于检出的文件。其大部分空间用于 BASE 缓存,因此减少或取消这些缓存可以节省空间,但原本能在本地完成的操作可能因此需要与版本库通信。

在 Apache 的对比表中,基于 BASE 的差异比较(diff)和还原(revert)从无需连接版本库的操作,变成了需要下载所需基准版本的操作。发行说明将这种下载称为 hydration。

这并不意味着每次都要下载所有文件。如果本地内容已修改的文件缺少所需的 pristine,就会下载该副本;下载后的副本会在仍有需要期间保留在缓存中。

不过,初始实现还可能一并下载包含操作目标的子树中其他需要下载的文件。Apache 表示,根据文件大小和网络速度的不同,用户可能感受到延迟。

提交方式也会改变。不再只发送发生变化的部分,而是传输每个本地已修改文件的完整内容。

检出选项带来的兼容性差异

svn checkout 的 --store-pristine=no 选项作用于整个工作副本。该选项使用 Format 32,因此所有操作这一工作副本的客户端都需要是 1.15 或更高版本。

默认检出仍使用缓存全部 BASE 的 Format 31,与 1.8 或更高版本的客户端兼容。Format 32 也支持完整缓存,因此不能仅凭格式编号判断是否启用了按需下载模式。

Apache 的功能表对所需服务器版本和版本库版本均标注为无限制。该功能不以升级服务器为前提,旧版客户端仍可使用单独的 Format 31 工作副本。

因此,值得考虑调整检出策略的环境是:包含大量体积大且不常修改的文件,本地空间不足,但与版本库的连接快速且稳定。如果频繁修改文件,下载基准版本和上传修改后文件的完整内容所带来的负担,可能超过节省空间的收益。

能否离线执行 diff 和 revert,也取决于所需基准版本是否已保存在本地。相比更改整个团队的默认设置,先在文件修改频率和连接条件合适的工作副本上选择启用,似乎更为合理。

已查阅的资料没有提供比较磁盘占用或通信量的测量方法和基准测试,本文也未进行实际运行测试。

仅凭服务器端版本库规模大,无法判断本地能节省多少空间。实际文件组合能释放多少空间,以及下载和上传需要等待多久,仍需分别确认。

在独立工作副本中检查配置

使用 1.15 或更高版本的客户端检出到另一路径,可以在保留现有工作副本的同时检查配置。以下命令使用了发行说明中记录的选项和查询命令。

svn checkout --store-pristine=no <repository-url> <working-copy-path>
cd <working-copy-path>
svn info

Apache 的 svn info 示例展示了 Working Copy Format 为 32、Working Copy Store Pristine 为 no 的配置。这只能确认是否配置为按需下载基准版本,并不能证明存储占用减少了 50%,也不能证明性能有所提升。

1.15 的变化并非让所有团队获得同样的收益,而是增加了在本地缓存和版本库通信之间进行取舍的选择。评估是否采用时,除了释放的空间,还需考虑基准版本下载、提交传输量,以及团队工具所用的客户端版本。

是否采用 Pristines On Demand,判断依据不是最高节省比例,而是减少 BASE 缓存带来的收益,能否抵消增加的通信负担和客户端兼容性成本。