The Fossil Sync Protocol
fossil-scm.org
fossil-scm.org
and you may already know about it but https://github.com/irengrig/fossil4idea (Apache 2) is the one listed in https://plugins.jetbrains.com/plugin/7479-fossil-integration although as you pointed out, it's very stale
Having a single file repository is just amazing.
Sidenote: I use git at work and I absolutely despise it.
Disclaimer: I have used Fossil and it's a decent system for small applications where everyone is on board. But I would not recommend it due to the reasons above.
I always thought the encrypted repositories was a neat feature but never really understood what a use case for it would be. I guess this might be one. https://www.fossil-scm.org/home/doc/trunk/www/encryptedrepos...
So... you only host your own repos on your own machines, without any kind of EULA? You do realise that hosting git _anywhere_ requires a degree of trust, right?
Dropbox has had data breaches before. You have to run their spyware to use it too. This is not a theoretical concern.
The biggest gotcha is that it's not particularly cross-platform-safe, because the file paths might be different.
Due to the way it's laid out, a git bare repository will work quite well with a per-file syncing system because references are stored as files pointing at the hashed object store.
So the worst you can do even without central coordination is have a reference conflict. I'm sure bad things can happen, but for the purposes of "keeping repos synced via syncthing" it works well enough (note: this is different to trying to keep a working repository synced, which I wouldn't recommend).
(Kiln split the difference by storing metadata in SQL Server, but keeping all the actual source data in their native formats. This works great, but is only really viable if you can guarantee things never get out of sync, which is basically impossible for random local Git repos.)
Was able to find any and would be curious to read more.
TLDR imported cvs2fossil, then fossil to git and mercurial. fossil was less optimized at scale. No dvcs was perfect. At scale things don't always import easily
"The number of artificial commits and conversion glitches could be minimized by cleaning up various issues. This was made easy by exploiting the database and writing small Python scripts calling “rcs” and related programs. Various tests show that the Fossil repository and CVS give exactly the same output for individual revisions. Differences when comparing working copies of specific branches are accounted for.
The performance of Fossil is competitive. Some areas like “fossil pull” need further work, but the majority of the work can shift to improving the user interface."
Around that time I tried to import the entire OpenBSD src repository into fossil, by importing the CVS-to-git conversion of src, as published on Github. I was following the official git->fossil migration guide. I left this running for a week (or two?) at which point the fossil git loader was loading OpenBSD commits from somewhere around the 2000s. At that point I stopped the process. Performance might be better today, I don't know. And perhaps post-conversion run-time performance is much better, but I never got that far. Anyone can try to reproduce these results by running the same conversion today.
I don't think I ever talked about my attempts with fossil to anyone at the time. But I recall the topic coming up somewhere when the Game of Trees project became public, and someone suggested I should be using fossil instead.
I am now using Game of Trees for all my OpenBSD development work and I am happy with it.
https://blog.gitbutler.com/git-tips-3-really-large-repositor...
SQLite uses Fossil because they want to not only eat their own dog food but they want a complete app that can do most of the work that GitHub can do.
Isn't that kinda scary with the birthday problem paradox for people who use Fossil to manage a large number of artifacts
The Wikipedia article at https://en.wikipedia.org/wiki/Birthday_problem#Square_approx... gives the approximation as:
n = sqrt(2 * m * p(n))
where p(n) is the probability of having a collision.Let p(n) be 1e-9 (a 1 in a billion chance).
With fossil's old default of SHA1's 160 bits you'll need roughly sqrt(2 * 2^80 * 1e-9) = 49 million artifacts before the likely duplicate.
A 1 in a billion chance might still be scary (if everyone on Earth has their own 50 million repo, each with unique artifacts, then there will be duplicates!), but SHA1 use in fossil is mostly a historical issue.
With fossil's new default (since v2.10 in 2019) of SHA3-256, you'll need something like 1.5e34 artifacts before there is a 1-to-a-billion chance of a duplicate.
As MathMonkeyMan's link points out, you can configure your repository to "shun-sha1" and only allow sha3.
You need 5.4e19 artifacts before the chance is 1 in a billion.
Isn’t this just by virtue of content addressing objects? In that sense Git’s odb is also a G-set.
Is this, or could this be modified to be, able to sync an sqlite database (or really the data it contains) between devices?
I'm aware of other ways to do this but if there was an internal sqlite way to do this...