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.
curl -LsSf https://raw.githubusercontent.com/Red-Eyed/git-sfs/main/scripts/install.sh | shIf 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 | shPrebuilt 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:
go build ./cmd/git-sfsgit-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 remoteOn another machine:
git clone <repo> && cd <repo>
git-sfs setup
git-sfs pull # download from remoteFiles under data/ open normally through symlinks.