2 个版本
0.1.1 | 2022年10月15日 |
---|---|
0.1.0 | 2022年10月15日 |
#2248 in 命令行实用工具
115KB
3K SLoC
sssync
Sssync 是一种以解决 Git 的两个限制为目标的版本控制系统;处理大文件的能力,以及将文件轻松存储到在线对象存储中的能力。
它的工作方式与 git 类似,其中每个文件都会被哈希并存储在提交中,这些提交本身也会被哈希、跟踪和存储。然而,它使用 xxhash 而不是 SHA1 来提高大文件哈希的性能,并且具有使用 S3 存储桶作为远程存储后端的能力。
Sssync 并没有解决使用 git 的二进制文件重复问题,因此它最适合于文件集合,尽管这些文件很大,但预计不会频繁更改。
如何获取它
Sssync 可在 crates.io 上找到。您可以使用以下命令安装它:
> cargo install sssync
如何使用它
初始化新的 sssync 仓库
在您想要使用 sssync 管理的任何目录中运行
> sssync init .
这将生成一个新的目录 .sssync
并设置仓库。一旦完成,您就可以运行 sssync add
来暂存文件以供添加,并运行 sssync commit
将暂存的更改添加到仓库中。
设置远程仓库
Sssync 具有使用 S3 作为远程后端的能力。要设置 S3 远程,请运行以下命令:
# sssync remote add <remote-name> <s3-url>
> sssync remote add new-remote s3://example.com/path/to/bucket
然后初始化远程仓库
# sssync remote init <remote-name>
> sssync remote init new-remote
在此之后,您可以将更改推送到远程仓库
# sssync remote push <remote-name>
> sssync remote push new-remote
工作原理
Sssync init 在指定的目录中创建一个名为 .sssnyc 的目录。此目录包含 sssync.db 文件以及另外两个目录: objects
和 remotes
。
对象
sssync 中的对象是存储在 objects 目录中的文件,其存储方式是通过其内容的哈希值。
sssnc.db
sssync.db
是一个 Sqlite3 数据库,其中包含有关 sssync 项目的所有运行信息:提交、引用、远程、索引、树和上传。
提交
sssync 中的提交是由在特定时间点的所有对象的哈希值组合而成的哈希,该哈希链接到上一个提交,以及有关提交的一些元信息(注释、作者、创建时间戳)。
CREATE TABLE commits (
hash TEXT PRIMARY KEY,
comment TEXT NOT NULL,
author TEXT NOT NULL,
created_unix_timestamp INTEGER NOT NULL,
parent_hash TEXT
);
树
在 sssync 中的树是提交创建时仓库文件路径的表示。当您将仓库切换到不同的 HEAD 时,树允许系统将提交中的对象放置在文件系统中正确的空间。
CREATE TABLE trees (
path TEXT NOT NULL,
file_hash TEXT NOT NULL,
size_bytes INTEGER NOT NULL,
commit_hash TEXT NOT NULL
);
暂存
暂存是当前仓库中所有尚未提交(但我们希望它们被提交)的更改的存储区域。
CREATE TABLE staging (
file_hash TEXT PRIMARY KEY,
path TEXT NOT NULL,
size_bytes INTEGER NOT NULL,
modified_time_seconds INTEGER NOT NULL
);
如何使用
> sssync init
> sssync add
> sssync commit
> sssync remote add example --kind s3 --location s3://test.bucket
> sssync remote init example
> sssync remote push example
依赖项
~64MB
~1M SLoC