- Replace rmp-serde with bincode 1.x in Cargo.toml - Update store.rs serialization/deserialization and ID hashing - Rename model.rs helpers from to_msgpack/from_msgpack to to_bytes/from_bytes - Consolidate MsgPack/MsgPackDecode error variants into single Bincode variant - Remove skip_serializing_if on ssh_signature (incompatible with bincode) - Update all documentation to reflect bincode storage format
2.7 KiB
2.7 KiB
arc

A delta-based version control system written in Rust.
Unlike Git's snapshot-based model, Arc stores incremental deltas using ZSTD-compressed bincode files. Changes are automatically tracked without manual staging, and commits are immutable once created.
Arc uses a bookmark system instead of branches, and bridges to Git
remotes for push, pull, clone, and sync operations via libgit2.
Features
- Incremental delta storage (ZSTD + bincode)
- Automatic change tracking (no staging step)
- Bookmarks and immutable tags
- Named stashes
- Three-way merge and graft (cherrypick/rebase)
- Git bridge for remote operations (push, pull, clone, migrate, sync)
- Optional SSH commit signing
- Per-repo and global YAML configuration with aliases
.arcignore/.ignoresupport
Building
Arc builds exclusively through Nix:
nix build
The flake uses nixpkgs-unstable, flake-parts, fenix, and crane.
A dev shell is available for iterative work:
nix develop
Usage
arc init [path] Initialize a new repository
arc commit <message> Commit current changes
arc status Show changes since last commit
arc diff [start..end] Show a diff of changes
arc log [start..end] Show commit history
arc show <mark|tag|commit> Show details of a ref or commit
arc history <file> [start..end] Show per-line modification history
arc switch <mark|tag> Switch worktree to a bookmark or tag
arc merge <mark|tag> Merge a bookmark or tag into the worktree
arc revert <commit|start..end> Revert a commit or range
arc reset [file...] Reset worktree to the last commit
arc graft <target> --onto <dest> Cherrypick commits onto a bookmark
arc mark add|rm|list|rename Manage bookmarks
arc tag add|rm|list Manage tags
arc stash create|use|push|pop|rm|list Manage named stashes
arc push [-r remote] Push to a git remote
arc pull [-r remote] Pull from a git remote
arc clone [-b branch] <url> [path] Clone a git remote as an arc repo
arc migrate Convert a git repo to an arc repo
arc sync [-p] Sync bookmarks and tags with remote
arc remote add|rm|list Manage remotes
arc config set|get|show|unset [-g] Manage configuration
Testing
nix develop -c cargo test
nix develop -c cargo clippy
nix develop -c cargo fmt --check