arc/README.md
hanna a6b1a027c8
refactor: switch storage format from MessagePack to bincode
- 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
2026-02-10 21:03:53 +00:00

84 lines
2.7 KiB
Markdown

# arc ![license] ![activity]
[license]: https://badge.hanna.lol/license/BlueOak-1.0.0
[activity]: https://badge.hanna.lol/activity/hanna/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` / `.ignore` support
## Building
Arc builds exclusively through Nix:
```sh
nix build
```
The flake uses `nixpkgs-unstable`, `flake-parts`, `fenix`, and `crane`.
A dev shell is available for iterative work:
```sh
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
```sh
nix develop -c cargo test
nix develop -c cargo clippy
nix develop -c cargo fmt --check
```
## License
[Blue Oak Model License 1.0.0](LICENSE.md)