- 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
84 lines
2.7 KiB
Markdown
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)
|