前言
Git 在我心目中,是当之无愧的最佳文本管理工具。它具有以下特点:可版本追踪、可保存提交信息、差异存储,十分适合对文本更改进行追踪。
最近恰好在重写 CMS 系统,需要做文章的版本管理,于是写了个 NPM 库,实现类似于 Git 一样的文本版本管理系统:
https://github.com/ravelloh/text-version
你也可以试试在线 demo:
https://ravelloh.github.io/text-version

简单来说,相比于传统的文本版本记录方式,此库能让你直接使用一串字符串来管理文本的版本。这样,就不需要在数据库中单独做个表,每次有更新的时候就创建新的记录了。这也有助于减少空间占用。
介绍
目前已经实现这些功能:
- 差异存储。仅存储变更部分代码,减少重复占用版本记录。类似于 Git ,你可以为每个编辑提供一个 commit message ,便于版本记录。版本引用。详见 #版本引用混合存储。同时支持快照、差异、版本引用,选择其中占用最小的方式。
使用
安装
这次抢到了个好名字(喜):
npm install text-version // orpnpm install text-version // oryarn add text-version基本用法
导入
// ES6 模块import { TextVersion } from 'text-version';// CommonJSconst { TextVersion } = require('text-version');创建实例
const tv = new TextVersion();使用示例
// 创建实例const tv = new TextVersion();// 提交新版本let storage = tv.commit('', '你好,世界!', 'v1');storage = tv.commit(storage, '你好,世界!\n 这是第二行。', 'v2');storage = tv.commit(storage, '你好,TypeScript !\n 这是第二行。');// 查看版本历史console.log(tv.log(storage));//[// { version: 'v1', isSnapshot: true },// { version: 'v2', isSnapshot: false },// { version: 'ycdf93', isSnapshot: false }//]// 查看指定版本console.log(tv.show(storage, 'v1')); // "你好,世界!"// 查看最新版本console.log(tv.latest(storage));// "你好,TypeScript !\n 这是第二行。"console.log(storage);// :2:v1:你好,世界!// 2:v2:R6I8:\\n 这是第二行。// 6:ycdf93:R3D4I11:TypeScript !// 重置到指定版本storage = tv.reset(storage, 'v2');// 压缩存储空间 - 将 v2 设为快照,删除 v1storage = tv.squash(storage, 'v2'); // v1 版本将被永久删除,v2 成为新的起始快照高级示例详见 Github README.
https://github.com/RavelloH/text-version/blob/main/docs/README-CN.md
API 参考
TextVersion
构造函数
new TextVersion(compressionProvider?: CompressionProvider)API 方法
commit(storage: string, text: string, version?: string): string
提交新版本,保存文本更改。
storage: 当前存储字符串text: 要保存的文本内容version: 可选的版本名,默认使用内容哈希show(storage: string, version: string): string | null
显示指定版本的文本内容。
storage: 存储字符串version: 要查看的版本名返回: 文本内容,如果版本不存在则返回 nulllog(storage: string): VersionInfo[]
显示版本历史日志,获取所有版本信息。
storage: 存储字符串返回: 版本信息数组latest(storage: string): string
获取最新版本的文本内容。
storage: 存储字符串返回: 最新版本的文本内容reset(storage: string, targetVersion: string): string
重置到指定版本,删除目标版本之后的所有版本。
storage: 存储字符串targetVersion: 要重置到的版本返回: 重置后的存储字符串squash(storage: string, targetVersion: string): string
将指定版本设为快照并删除之前的版本,用于减少存储空间占用。
storage: 存储字符串targetVersion: 要设为快照的版本(该版本之前的所有版本将被删除)返回: 压缩后的存储字符串注意: 此操作不可逆,会永久删除目标版本之前的所有版本历史。适用于当版本历史过长时进行存储空间优化。
