bita
got
Our great sponsors
bita | got | |
---|---|---|
3 | 12 | |
212 | 118 | |
- | 0.8% | |
3.3 | 7.8 | |
3 days ago | 9 days ago | |
Rust | Go | |
MIT License | GNU General Public License v3.0 only |
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
bita
-
CDC File Transfer
Built this cdc tool for software update of embedded (Linux) systems and have deployed it with good enough performance on a couple of arm CPUs; https://github.com/oll3/bita
Though main goal has been keeping data usage low rather than speed up.
-
rsync, article 3: How does rsync work?
Nice write up. rsync is great as an application but I found it more cumbersome to use when wanting to integrate it into my own application. There's librsync but the documentation is threadbare and it requires an rsync server to run. I found bita/bitar (https://github.com/oll3/bita) which is inspired by rsync & family. It works more like zsync which leverages HTTP Range requests so it doesn't require anything running on the server to get chunks. Works like a treat using s3/b2 storage to serve files and get incremental differential updates on the client side!
-
KySync: A complete modern C++ rewrite of Zsync with 3x-10x+ performance boost
Very cool, thanks for sharing. I did a deep dive in the past into various syncing/binary diff protocols and really liked zsync. It was probably my top choice for the application I was designing but I ended up not using it. The library I did use is called bita: https://github.com/oll3/bita. It is inspired by the same family of projects as zsync. The main advantage I found with bita is that the core logic is encapsulated in a library so that you don’t only have to use the binaries but can integrate it directly into an application. I’d be curious to know if that’s in the plans for KySync.
got
-
Show HN: A version control system based on rsync
I've not heard the term "probabilistic tree" and I've having difficulty pulling up references. I suspect it's implemented by subpackage ptree[0]. Do you have resources on what makes probabilistic trees different from hash tables?
[0] https://github.com/gotvc/got/tree/master/pkg/gotkv/ptree
Sure, Git stores data in a trie. Each file is one blob identified by hash, and directories (called trees in Git) are blobs where each line is a directory entry with a name and the hash of a file or another tree. This means that modifying an object /down/a/long/path/like/this.txt has to create copies of all the trees on the way up. The technical term for this is "write amplification", and in Git it is affected by path length among other things.
Got stores paths in a probabilistic tree (GotKV[0]). The number of nodes before you get to data will scale logarithmically with the size of the entire filesystem, not the depth of a specific object.
Then there is the issue of large files. A file in Git is always 1 blob. Syncing a large file is not easy because if you are interrupted and have to restart, you have lost all your progress. You can't verify the hash of a blob until you have the whole thing. Got has a maximum blob size, so you'll only be buffering <2MB at a time before you can verify that the blob is correct. If a transfer is interrupted, the most you'll have to repeat is one blobs worth, plus any tree nodes above that blob.
Compared to rsync, Got uses variable size chunks and a faster content defined chunking algorithm, recently featured here on HN[1]. I haven't thought about if variable vs fixed chunks is better for file transfer, but for version control, the higher chance of convergence is important. It means you have better deduplication.
This is a very similar to one of my projects "Got".
The algorithms it uses are superior to rsync and git in a few ways. It comes short on features, especially for software development compared to Git. The motivation is more for personal file storage.
I notice you're using Go and AGPL licensed, so you could borrow any of Got's libraries without issue. (Got is GPL licensed.) Definitely reach out in a GitHub issue.
-
CDC File Transfer
FastCDC is the same chunking algorithm used in Got.
-
SourceHut terms of service updates, cryptocurrency projects to be removed
Thanks for sharing RocketGit. This is the first time I've heard of it, and yes, it does look like a cool copyleft solution to self-hosted Git.
Another interesting option is Brendan Caroll's got[0], which allows sharing of repositories over INET256[1]. I'm sure there are other P2P approaches to Git, but this one just piqued my interest. Unfortunately it has a naming conflict with OpenBSD's Game of Trees[2].
[0] https://github.com/gotvc/got
-
Show HN: Encrypted Git hosting should be easy
I work on a project which solves a similar use case.
Got also does E2EE encryption, but it can additionally encrypt branch names from remote servers.
-
What Comes After Git
I've been working on a project "Got". Which deals with the LFS problem, mentioned in the post.
Got isn't really trying to do software version control better than Git. It's trying to make general purpose file versioning practical, with a workflow similar to Git's.
-
Show HN: Let's build an end-to-end encrypted data store
In the same space is the key-value store underlying Got: GotKV. https://github.com/gotvc/got/tree/master/pkg/gotkv
It stores encrypted blobs in any content-addressed store, and provides a copy-on-write key-value store API.
- Show HN: Got is like Git, but with an 'o'
What are some alternatives?
yaydl - yet another youtube down loader (Git mirror)
cdc-file-transfer - Tools for synching and streaming files from Windows to Linux
humble-cli - 📦 The missing CLI for downloading your Humble Bundle purchases
async-subscription-map - Async bookkeeping datastructure for dynamic state subscriptions across tasks
Zenko - Zenko is the open source multi-cloud data controller: own and keep control of your data on any cloud.
forge - Work with Git forges from the comfort of Magit
jj - A Git-compatible DVCS that is both simple and powerful
difftastic - a structural diff that understands syntax 🟥🟩
diffsitter - A tree-sitter based AST difftool to get meaningful semantic diffs
josh - Just One Single History
typecrypt - Typescript public key encryption library using webcrypto (designed for social networks)