Snowtrack / SnowFS
- среда, 24 февраля 2021 г. в 00:28:54
TypeScript
👋 [Looking for maintainers] SnowFS - a fast, scalable version control file storage for graphic files 🎨
SnowFS is a lightweight multi-platform support library with a focus on binary file versioning. It is made for the graphics industry and was initially developed for Snowtrack.
Disclaimer: This project is in alpha state and actively developed. Do not use this yet in a production environment or without backups.
Supports Branches
Asynchronous File Hashing
Project open to file-content awareness (e.g: *.psd
, *.blend
, *.c4d
, ..
)
Super-fast-detection of modifications in large binaries
Support for instant snapshots**
Support for instant rollback**
Support for files bigger >4TB
Block-cloning and Copy-on-Write support for APFS and ReFS***
Support for removing single versions and/or binaries
Primarily I/O bound through libuv
Feature XYZ made by you!
** If the underlying filesystem supports it (e.g. APFS, ReFS)
First and foremost, the implementations of Git - namely Git/Git-LFS
and libgit2 are excellent implementations of version control systems.
But due to their focus on the software development lifecycle they are not suitable to version binaries or graphic files.
SnowFS
addresses the technical challenges for graphic files by its core design.
Advantages:
Disadvantages:
Advantages:
Disadvantages:
SnowFS
is currently written in TypeScript. It is a great language to write powerful and performant
I/O bound prototypes. There is a basic and experimental C/C++ backport, but we are looking for maintainers
to get things finally rolling. If you have comments, ideas or recommendations, please let us know.
We have also implemented a comparison benchmark between SnowFS vs. git-lfs. After executing the build instructions for a development build, the benchmarks can be executed with the following command:
$ npm run benchmarks
Example run on a Macbook Pro (2020) with an APFS formatted SSD to check-in, delete and restore a 4GB Photoshop File.
...
git lfs track *.psd
git add texture.psd: 20164ms
snow add texture.psd: 4596ms
git rm texture.psd: 575ms
snow rm texture.psd: 111ms
git checkout HEAD~1: 9739ms
snow checkout HEAD~1: 1ms
You can find the best and up-to-date code examples in the test/
directory. Given below these are simply "Hello World!" examples to get you started.
import * as fse from "fs-extra";
import { join } from "path";
import { Index } from "./src";
import { Repository } from "./src/repository";
export async function main() {
let repo: Repository;
let index: Index;
const repoPath = "/path/to/a/non/existing/directory";
Repository.initExt(repoPath)
.then((repoResult: Repository) => {
return fse.copyFile("/path/to/texture.psd", join(repoPath, "texture.psd"));
})
.then(() => {
index.addFiles(["texture.psd"]);
return index.writeFiles();
})
.then(() => {
return repo.createCommit(index, "This is my first commit");
});
}
main();
The CLI of SnowFS
offers some basic functionality and is subject to enhancements.
$ snow init foo
$ cp /path/to/texture.psd foo/texture.psd
$ cd foo
$ snow add .
$ snow commit -m "My first texture"
$ snow log
$ snow checkout -b MyNewBranch
$ snow log
To build SnowFS
install node.js for your specific platform.
To build a development build execute:
$ git clone https://github.com/Snowtrack/snowfs.git
$ cd snowfs.git
$ npm install
$ npm run ava
$ npm run tsc
$ npm run build
$ cd dist/out-tsc
Starting with version 1.0.0 SnowFS
follows the semantic versioning
scheme. The API change and backward compatibility rules are those indicated by
SemVer.
SnowFS
is licensed under the MIT license, please review the LICENSE file.
Excluded from the license are images, artworks, and logos. Please file a request by mail, if you have any questions.
The tests and benchmarks also serve as API specification and usage examples.
These resources are not handled by SnowFS
maintainers and might be out of date. Please verify it before opening new issues.
Currently, Windows, macOS, and Linux are supported. SnowFS
works on plain filesystems like FAT, NTFS, HFS+ and has extended support for APFS and ReFS*.
See the guidelines for contributing.