The primary repo for this project is currently hosted on Github. Issues and pull requests can be created there.
I have opened up havarti publicly in an incomplete, non-working state. I am starting a new job and thought it best to avoid any potential conficts of interest by allowing this work to be done out in the open. Consequently, Havarti will have lots of rough edges for a while, and I apologize. You are welcome to contribute to get it to a usable state if Havarti's goals align with your own.
git
is (as of this writing) the reigning champion of version control systems.
It was originally created to meet the needs of the
completely distributed development model of the Linux kernel. It is a hairy
problem to tackle, and it accomplishes the goal admirably. However, the projects I
work on, both professionally and personally, are not like the Linux kernel, and although git
comes close to
meeting my needs and preferences, it isn't exactly what I want. I've looked into
others VCS tools like hg
, fossil
, and svn
, and these do not completely match what
I'm looking for either. So I started work on Havarti. It is my own small VCS to
meet my preferences and needs (I don't expect it to become widely used like
git
) . If other people find it useful, great! However, if I'm the only one who
ever uses it, that's ok too; I'd still develop it anyway, just for personal
experience if nothing else.
When you disemvowel the word Havarti, you are left with hvrt
(the name of
the tool). We could probably treat it as an acronym, like "Hybrid VCS
\<something> \<something>". Let me know if you think of something clever for
the last two letters. Regardless, read below to learn some of Havarti's
features/goals, roughly in order of priority:
Here is quick comparison of Havarti to Git, Fossil, Mercurial, and Subversion. Havarti's features were chosen primarily because they matter to me. Maybe you value similar features:
Feature | Havarti | Git | Fossil | Mercurial | Subversion |
---|---|---|---|---|---|
Explicit File Renames | ✔️ | ❌¹ | ❔ | ✔️ | ✔️ |
Explicit File Copies | ✔️ | ❌¹ | ❔ | ✔️ | ✔️ |
Single Binary | ✔️ | ❌ | ✔️ | ❌ | ❌ |
Native Cross Platform | ✔️ | ❕² | ✔️ | ✔️ | ✔️ |
Commit offline (i.e. distributed) | ✔️ | ✔️ | ✔️ | ✔️ | ❌ |
Centralized model | ✔️ | ❕³ | ❌ | ❕⁴ | ✔️ |
Autosync with upstream (configurable) | ✔️ | ❌ | ✔️ | ❌ | ✔️⁵ |
Shallow clone⁷ | ✔️ | ✔️ | ❔ | ✔️ | ✔️⁵ |
Partial clone⁷ | ✔️ | ✔️ | ❌ | ❌⁴ | ✔️⁵ |
Narrow clone/checkout | ✔️ | ❌ | ❌ | ❌⁴ | ✔️⁵ |
Any file size | ✔️ | ✔️ | ❌ | ✔️ | ✔️ |
History rewriting abilities ⁶ | ✔️ | ✔️ | ❌ | ✔️ | ❌ |
Discourage unsafe operations ⁶ | ✔️ | ❌ | ✔️ | ❌ | ✔️⁵ |
Serve content as static website | ✔️ | ❌ | ✔️ | ❌ | ❌ |
Bidirectional bridge to git | ❌ | ✔️ | ❌ | ✔️ | ✔️ |
Local webapp issue tracker, forum, etc. | ❌ | ❌ | ✔️ | ❌ | ❌ |
git blame
and/or amount of file changes between commits.bash
, perl
, and curl
.