git-sfs
SFS stands for Symbolic File Storage — like Git LFS, but instead of large file pointers it uses plain symlinks that Git already understands natively.
git-sfs keeps large files — datasets, model checkpoints, media archives — out of
Git while Git tracks exactly where they belong.
Git tracks symlinks.
git-sfs stores file bytes.
rclone moves files.
No LFS server. No database. No pointer files. Git commits normal symlinks; the bytes live in a local content-addressed cache and sync to any rclone remote.
Use it when you want a repo that stays fast and cloneable, large files addressed
by SHA-256 hash, a remote you can inspect with rclone ls, and CI that fails
loudly when referenced files are missing.
Install
Install both git-sfs and rclone from PyPI:
uv tool install git-sfs
Or use the standalone installer:
curl -LsSf https://raw.githubusercontent.com/Red-Eyed/git-sfs/main/scripts/install.sh | sh
If raw.githubusercontent.com is blocked (corporate proxy), use the release asset URL instead:
curl -LsSf https://github.com/Red-Eyed/git-sfs/releases/latest/download/install.sh | sh
Prebuilt binaries for macOS and Linux (arm64 and x86_64). Windows is not supported — git-sfs relies on symlinks, which require elevated privileges on Windows. Installs rclone too if not already on PATH.
See docs/installation.md for proxy, CA bundle, and source-build options.
Build from source:
cargo install --path crates/git-sfs --locked
Quick start
Prerequisites:
rcloneinstalled and configured with at least one remote. See docs/remotes.md for setup instructions.
git-sfs init # create .git-sfs/config.toml
# edit config.toml: set remote backend, path, rclone config
git-sfs setup # bind local cache
git-sfs add data/ # hash files, replace with symlinks
git add .git-sfs/config.toml data/
git commit -m "track datasets"
git-sfs push # upload to remote
On another machine:
git clone <repo> && cd <repo>
git-sfs setup
git-sfs pull # download from remote
Files under data/ open normally through symlinks.
Documentation
Metadata
Release files for git-sfs 2.0.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Built distributions (wheels)
| File | Reset | |||
|---|---|---|---|---|
| git_sfs-2.0.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.musllinux_1_2_x86_64.whl | Python 3 | none | Linux glibc 2.17+ x86-64, Linux musl 1.2+ x86-64 | Details |
| git_sfs-2.0.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.musllinux_1_2_aarch64.whl | Python 3 | none | Linux glibc 2.17+ ARM64, Linux musl 1.2+ ARM64 | Details |
| git_sfs-2.0.0-py3-none-macosx_12_0_x86_64.whl | Python 3 | none | macOS 12.0+ x86-64 | Details |
| git_sfs-2.0.0-py3-none-macosx_12_0_arm64.whl | Python 3 | none | macOS 12.0+ ARM64 | Details |
Total release size: 263.8 MB
Release files / git_sfs-2.0.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.musllinux_1_2_x86_64.whl
| Download URL | git_sfs-2.0.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.musllinux_1_2_x86_64.whl |
|---|---|
| Size | 67.1 MB |
| Tags | Linux glibc 2.17+ x86-64 Linux musl 1.2+ x86-64 Python 3 |
|
SHA-256 checksum How to use checksums |
aeb28dedf2fac05de94a4dc7d3ab52388dbef45d495c1c03f5fff9d7cbbb4b0b
|
|
BLAKE2b-256 checksum How to use checksums |
eb32db810d08183bf0f41f7b00dff02858526ee663e1e55e60be76074c981728
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.1 {"installer":{"name":"uv","version":"0.12.1","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / git_sfs-2.0.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.musllinux_1_2_aarch64.whl
| Download URL | git_sfs-2.0.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.musllinux_1_2_aarch64.whl |
|---|---|
| Size | 64.2 MB |
| Tags | Linux glibc 2.17+ ARM64 Linux musl 1.2+ ARM64 Python 3 |
|
SHA-256 checksum How to use checksums |
224c2171336d00fb167a196fda198b813b24fcb54f54ea8be40ecda849969ad2
|
|
BLAKE2b-256 checksum How to use checksums |
8abc8d114d0fbd2c67878a4fc70e785882c34b5e00f6034bb2706c856a469f35
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.1 {"installer":{"name":"uv","version":"0.12.1","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / git_sfs-2.0.0-py3-none-macosx_12_0_x86_64.whl
| Download URL | git_sfs-2.0.0-py3-none-macosx_12_0_x86_64.whl |
|---|---|
| Size | 67.5 MB |
| Tags | Python 3 macOS 12.0+ x86-64 |
|
SHA-256 checksum How to use checksums |
b522ae094fe94409f29825bf4c4f56414ecf116040d19d78150c3331b26d662c
|
|
BLAKE2b-256 checksum How to use checksums |
896bd9b22ff5544fb5b8ed063bceedbe57adfeeeddc444f193df4f7f7a786651
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.1 {"installer":{"name":"uv","version":"0.12.1","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / git_sfs-2.0.0-py3-none-macosx_12_0_arm64.whl
| Download URL | git_sfs-2.0.0-py3-none-macosx_12_0_arm64.whl |
|---|---|
| Size | 65.1 MB |
| Tags | Python 3 macOS 12.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
6761d088a587be53885dd38dbddd5c792e7fc6ab25d2f299d3b1677aa2870850
|
|
BLAKE2b-256 checksum How to use checksums |
943b42e004691b782e328aa6a9193d8bcb754d1ce3ad292df15cdf92b9c05465
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.1 {"installer":{"name":"uv","version":"0.12.1","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Security for git-sfs 2.0.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.