Darke Files is a version control and file synchronization system
darke.handmade.network
darke.handmade.network
https://github.com/bcpierce00/unison
I'd love to see Darke Files get everything right that Unison gets right, that nearly all commercial projects get wrong, through the usual blend of arrogance and ignorance:
* Meta data. It takes a lot to insure that two copies of a MacOS file appear identical to a user. There used to be a test suite on the web that embarrassed everybody.
* Atomic folders such as ".git" or an application bundle. A prototypical example is a MacOS sparse disk bundle, supported by a folder of many small files. This makes incremental backup and transfer more efficient, assuming a single source. Unison lets you specify the conflict resolution at the folder level, all-or-nothing decide which copy or fix it.
* Symbolic links. This is wildly complicated by users, sure they're right, who want special handling to hack features into sync software that aren't there. A symbolic link is just a file, with correct use the responsibility of the user. You wouldn't want sync software stopping to view your porn, right? They're just files, not the sync software's business.
I use Dropbox for various purposes because I need to, but they bungle more of this than one would expect. For example, a typical MacOS application bundle can have internal symbolic links a typical user never notices, pointing the "current" version of resources to a versioned folder. Last I checked, Dropbox expands the symbolic link into a redundant copy, wasting space without kneecapping the app.
One could go on... I've given up on reporting these issues, though the responses would make a hilarious blog post.
Darke Files isn't available for MacOS yet. I'll make sure to understand how MacOS' file system works (especially the meta data) before working on a MacOS port. If you can provide me with more info about that test suite I would be very interested.
Right now version history of a repository is saved in a ".darke" directory that works quite similar to Git's ".git" directory. I've got a few experiments planned to improve on that system, how well it can be incrementally backed-up is a metric I will also consider.
That Darke Files does not change your files at all is one of the core principles. The same will be true for symbolic links. I'm not handling symbolic links quite yet; I've been bitten by Git's not-good-enough handling of symbolic links on Windows before.
I would think more than twice before introducing something closed-source into such important areas like version control or backups.
The problem is not the need to pay (closed-source freeware exists, and I regularly donate to open-source projects), but continuity.
It also follows the client/server architecture of Perforce, supports large files, etc. I wish it was open source though, but at least it's free for now.
Whereas these CLI tools like tar, rclone and rsync, I setup to run periodically, I have a simple bash script, and I have a pretty good idea of how they work when I reinstall my system.
That is interesting to game developers and creatives (like movie EFX folks). They can have huge assets, and Git is pretty terrible at large binaries.
That's why Perforce is still popular in the gaming industry. It handles big files, very well.
For me, it works fine in Gitea, and I do audio and music for games. Are there more appropriate solutions like Perforce? Probably, but the current pipeline is git-based.
The integration with Git is also very clunky since it's based on smudge/clean filters (that were really meant to update templates in your text files or change line endings, not download big files).
The server options are also limited and not easy to deploy. Not a problem if you use a central repository on the cloud, but a non-starter if you want direct sync between devices.
The part where filters are used is not elegant, porcelain for LFS could be better.
So that's what i'm writing because i'm just picky, i guess heh.
The client doesn't deduplicate, so you have to download whole objects and store them. Of course you can clean up the older version of objects, but that will force you to re-download if you change branch or go back in the history.
If I have multiple copies of the same file in different subdirectories, and I need all of them for work, there's no way around storing all of them as multiple copies on my machine, right? Unless you do some symlinking or hardlinking magic, but that will likely break platform and software compatibility so I wouldn't want it to happen either...
Similar with history, how can I have my cake (not have previous versions occupy space locally) and eat it too (have them readily available locally without download)?
Or do you mean something like chunking binary files and then deduping chunks? Is it an LFS limitation, or simply that no Git LFS client/server implementation does it yet? It's still fairly new after all.
There is no better integration though, right? I'm implementing an alternate for Git LFS because i also don't like it - but my past research led me no where. Git just doesn't have good support for this and all we can to is smudge or batch smudge.
iirc there's some nuance/difference to how Git Annex achieves this problem space, but fundamentally i think everyone basically does the same thing. No?
If there's a better way i'd love to know, since i'm literally replacing/reimplementing Git LFS for my own pipeline.
Yeah this is not specifically a critique of LFS, it's a critique of the whole thing. Some of those problems are definitely limitations of Git. I'm not trying to point fingers, but the result is bad.
I dislike Smudge in that it felt like an abuse of an API. BUT, i'm not aware of any real problems with it.. but i could easily be missing something. So i'd love opinions on the subject :)
> Can I start using this right now?
> Darke Files is still alpha software so please don't use it in production. Additionally Darke Files is missing many missing many features one might expect from a version control system (or a software forge, or a devops platform). Keep good backups of your data if you decide to try it out.
Does this help?
There actually aren't any features to activate, the goal of Darke Files is that different users of the same repository can work at different ends of this sync <-> version control spectrum.
https://www.goldthread2.com/identity/origins-colgate-darlie-...
I don't think most people would make the connection to the slur, and that's if they even know the slur exists, since it's pretty antiquated.