We’re proud to announce the second public release of Pijul, a new version control system aiming to be easy to learn and use, distributed, and fast.
Pijul is based on a theoretical model of patches described here. At the conceptual level, it merges concepts from category theory, and the patch theory developed by darcs. At the practical level, a number of new ideas allow for a quite fast system.
A lot has changed in this second release. Pijul has been completely rewritten in a new language, Rust. While rewriting, we have also focused on a more limited interface, to try and ensure correctness.
What we have
Here is what we have in this release (modulo bugs, of course):
- Basic file system operations: add, remove, mv, ls.
- Record, for text files only.
- Conflict handling, at the line level.
- Pull from local repositories, ssh and http.
- Push to local repositories, ssh.
- Repositories robust to hash function changes (see Layout of a repository).
What is missing
The most crucially missing feature is unrecord, with rollback a close second, but there is no fundamental problem with this. Other features include blame/annotate, especially in the case of conflicts (this is probably an easy project to start contributing).
libpijul would probably also benefit from a cleaner code separation between algorithms and storage, which we are currently doing. For performance reasons, version 0.2 is tightly bound to LMDB, taking advantage of very specific features. However, some of the functions could easily be move out.
We’ve also started a “hub-like” project called the nest, to be released in the first semester of 2016. Please contact if you are interested in contributing.
Will Pijul be on github?
However, note that we’re planning to move to Pijul itself as our main version control system really soon (probably even from Pijul 0.3).
How stable is the format?
Not too stable. We expect a number of small adjustments in the next release, which might break repositories created using Pijul 0.2. In particular, the format is supposed to be branch-ready, but we’ve never really defined the operations we want on branches (feedback wanted, by the way). Some operations might need extra caching to be efficient.
There is a discussion thread on reddit.